Последняя проверка: май 2026 г.
Разверните сервисы AWS для экзамена AZ-700 с помощью чистого Terraform: пошаговое руководство с привязкой каждого блока к разделам экзамена. Код также совместим с OpenTofu.
К концу этой лабораторной работы вы развернете с помощью простого Terraform эталонную сеть AZ-700 — VNet-хаб с подсетью общих служб, VNet-спицу с подсетью приложений, двунаправленный пиринг между ними, частную зону DNS, связанную с обеими VNet для разрешения имен между VNet, и журналы потоков NSG в Log Analytics для обеспечения видимости трафика.
Поместите фрагменты кода в один файл main.tf, запустите terraform init, затем terraform apply пошагово.
>= 1.5 или OpenTofu >= 1.6.az login).В основном бесплатно, с одним исключением:
Около 1–2 $ в месяц в неактивном состоянии. Наиболее затратные ловушки AZ-700 — это VPN Gateway (~60 $/месяц) и ExpressRoute (200+ $/месяц) — оба здесь опущены.
Стандартное начало для Azure.
terraform {
required_version = ">= 1.5"
required_providers {
azurerm = { source = "hashicorp/azurerm", version = "~> 4.0" }
}
}
provider "azurerm" {
features {}
}
locals {
tags = {
Project = "certlabpro-az-700"
ManagedBy = "terraform"
}
}
resource "azurerm_resource_group" "main" {
name = "certlabpro-az-700-rg"
location = "eastus"
tags = local.tags
}Топология "хаб-спица" является эталонной для AZ-700. Хаб централизует общие службы (брандмауэр, VPN-шлюз, DNS-преобразователь, мониторинг) и спицы пирингуются с хабом для доступа к ним. Мы строим хаб по адресу 10.0.0.0/16 с одной подсетью — в реальном хабе у вас была бы GatewaySubnet для VPN/ExpressRoute Gateway, AzureFirewallSubnet для Azure Firewall и подсеть общих служб для входящих/исходящих конечных точек DNS Resolver. Область действия лабораторной работы — форма топологии; службы шлюза выходят за рамки (высокая стоимость).
resource "azurerm_virtual_network" "hub" {
name = "vnet-hub"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
address_space = ["10.0.0.0/16"]
tags = local.tags
}
resource "azurerm_subnet" "hub_shared" {
name = "shared-services"
resource_group_name = azurerm_resource_group.main.name
virtual_network_name = azurerm_virtual_network.hub.name
address_prefixes = ["10.0.1.0/24"]
}Спица по адресу 10.1.0.0/16 — намеренно неперекрывающаяся с хабом. NSG, прикрепленный к подсети приложений, в production ограничивал бы входящий трафик до определенных исходных CIDR; в лабораторной работе используется * для источника, чтобы архитектура была тестируемой.
AZ-700 Implement core networking infrastructure неоднократно затрагивает вопрос NSG на подсеть против NSG на NIC. NSG на уровне подсети (эта лабораторная работа) являются правильным ответом, когда в вопросе говорится "применяется ко всем ресурсам в подсети"; уровень NIC является переопределением.
resource "azurerm_virtual_network" "spoke" {
name = "vnet-spoke"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
address_space = ["10.1.0.0/16"]
tags = local.tags
}
resource "azurerm_subnet" "spoke_app" {
name = "app"
resource_group_name = azurerm_resource_group.main.name
virtual_network_name = azurerm_virtual_network.spoke.name
address_prefixes = ["10.1.1.0/24"]
}
resource "azurerm_network_security_group" "spoke_app" {
name = "nsg-spoke-app"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
security_rule {
name = "AllowHttpsFromInternet"
priority = 100
direction = "Inbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "*"
destination_port_range = "443"
source_address_prefix = "*"
destination_address_prefix = "*"
}
tags = local.tags
}
resource "azurerm_subnet_network_security_group_association" "spoke_app" {
subnet_id = azurerm_subnet.spoke_app.id
network_security_group_id = azurerm_network_security_group.spoke_app.id
}Пиринг VNet — это примитив подключения AZ-700 в пределах региона. Два ключевых свойства, которые проверяются на экзамене:
allow_forwarded_traffic — требуется, когда хаб планирует перенаправлять трафик от одной спицы к другой (транзит через брандмауэр в хабе).use_remote_gateways / allow_gateway_transit — спица использует use_remote_gateways = true для использования VPN/ER шлюза хаба. В этой лабораторной работе у нас нет шлюза, но форма атрибута тестируется на экзамене.resource "azurerm_virtual_network_peering" "hub_to_spoke" {
name = "hub-to-spoke"
resource_group_name = azurerm_resource_group.main.name
virtual_network_name = azurerm_virtual_network.hub.name
remote_virtual_network_id = azurerm_virtual_network.spoke.id
allow_forwarded_traffic = true
allow_gateway_transit = true
}
resource "azurerm_virtual_network_peering" "spoke_to_hub" {
name = "spoke-to-hub"
resource_group_name = azurerm_resource_group.main.name
virtual_network_name = azurerm_virtual_network.spoke.name
remote_virtual_network_id = azurerm_virtual_network.hub.id
allow_forwarded_traffic = true
# use_remote_gateways = true # uncomment when a gateway exists in the hub
}Частные зоны DNS — это ответ AZ-700 в разделе Проектирование и реализация разрешения имен для разрешения имен между VNet, которое не зависит от DNS Azure по умолчанию. Мы создаем зону internal.contoso.com и связываем с ней как VNet-хаб, так и VNet-спицу. Ресурсы в любой из VNet теперь могут запрашивать записи в этой зоне.
Флаг registration_enabled = true на ссылке хаба позволяет ресурсам в хабе автоматически регистрировать свои имена хостов. AZ-700 тестирует эту автоматическую регистрацию по сравнению с ручным созданием A-записей как повторяющийся вопрос "как получить чистые DNS-имена для моих VM".
resource "azurerm_private_dns_zone" "main" {
name = "internal.contoso.com"
resource_group_name = azurerm_resource_group.main.name
tags = local.tags
}
resource "azurerm_private_dns_zone_virtual_network_link" "hub" {
name = "hub-link"
resource_group_name = azurerm_resource_group.main.name
private_dns_zone_name = azurerm_private_dns_zone.main.name
virtual_network_id = azurerm_virtual_network.hub.id
registration_enabled = true # auto-register hub-resident VMs
tags = local.tags
}
resource "azurerm_private_dns_zone_virtual_network_link" "spoke" {
name = "spoke-link"
resource_group_name = azurerm_resource_group.main.name
private_dns_zone_name = azurerm_private_dns_zone.main.name
virtual_network_id = azurerm_virtual_network.spoke.id
registration_enabled = false # spoke resources query but don't register
tags = local.tags
}terraform destroy уничтожает все. Ресурсы пиринга автоматически отключаются при уничтожении любой VNet; Terraform корректно обрабатывает порядок. Частные зоны DNS с активными записями могут уничтожаться медленно (Azure сначала ждет отсоединения всех потребительских ссылок) — будьте терпеливы.
AZ-700 охватывает сетевые аспекты, которые не умещаются в эту лабораторную работу — VPN Gateway (~60 $/месяц, слишком дорого для лабораторной работы), ExpressRoute + ER Gateway, Azure Firewall + Firewall Policy + Premium IDPS (~1 $/час в неактивном состоянии), Application Gateway + WAF, Azure Front Door, Azure Load Balancer (уровень Standard), общедоступные зоны Azure DNS, DNS Private Resolver, Azure Bastion, сетевые виртуальные устройства, Virtual WAN, Route Server, пользовательские таблицы маршрутизации (UDR), конечные точки службы, частные конечные точки + Private Link Service и DDoS Protection Standard.
Мы придерживаемся формы хаб-спица + пиринг + Private DNS, потому что это основа, к которой прикрепляются все остальные шаблоны AZ-700. VPN Gateway размещается в хабе. Брандмауэр размещается в хабе. Application Gateway защищает подсеть приложений спицы. Частные конечные точки маршрутизируются через хаб. Правильно настройте топологию; накладывайте слои по шаблонам.
Для вышеуказанных аспектов см. разделы Просмотр, Справочник и Editorial на странице этого сертификата.