Última revisão: maio de 2026
Construa os serviços da AWS do exame AZ-305 com Terraform puro — um bloco de cada vez, cada um vinculado a um domínio do exame. O mesmo código funciona no OpenTofu.
Ao final deste laboratório, você terá provisionado, com Terraform puro, o núcleo da arquitetura de referência AZ-305 — uma topologia VNet hub-spoke (um hub, um spoke, emparelhados), um Azure Front Door para entrada HTTPS global, um Key Vault para gerenciamento de segredos e certificados com autorização RBAC, e o sistema de diagnóstico que todo design de Arquiteto-Especialista presume. Cada bloco se conecta a um domínio de design do AZ-305.
Solte os snippets em um único main.tf, execute terraform init e depois terraform apply passo a passo.
>= 1.5 ou OpenTofu >= 1.6.az login).A pilha completa custa ~$36/mês ociosa. O Front Door é a armadilha de custos — destrua-o prontamente se não estiver testando ativamente.
Início padrão do Azure. O AZ-305 espera que você utilize o par eastus / westus para qualquer pergunta sobre "duas regiões" — eles são o par de regiões canônico do AZ-305 para testes de latência e cenários de failover de regiões emparelhadas.
terraform {
required_version = ">= 1.5"
required_providers {
azurerm = { source = "hashicorp/azurerm", version = "~> 4.0" }
random = { source = "hashicorp/random", version = "~> 3.6" }
}
}
provider "azurerm" {
features {
key_vault {
purge_soft_delete_on_destroy = true
}
}
}
resource "random_id" "suffix" {
byte_length = 3
}
data "azurerm_client_config" "current" {}
locals {
tags = {
Project = "certlabpro-az-305"
ManagedBy = "terraform"
}
}
resource "azurerm_resource_group" "main" {
name = "certlabpro-az-305-rg"
location = "eastus"
tags = local.tags
}Hub-spoke é o design de rede de referência do AZ-305: uma VNet hub central hospeda serviços compartilhados (firewall, gateway VPN, DNS), e VNets spoke hospedam cargas de trabalho. Os spokes se emparelham com o hub bidirecionalmente; o tráfego spoke-to-spoke transita pelo hub. O exame testa essa topologia incansavelmente porque é a base de qualquer zona de aterragem Azure com múltiplas cargas de trabalho.
Construímos o hub-spoke mais simples possível: uma VNet hub (10.0.0.0/16), uma spoke (10.1.0.0/16), emparelhamento bidirecional. Designs reais de hub-spoke adicionam o Azure Firewall no hub e tabelas de rotas next_hop_in_ip_address forçando o tráfego do spoke através dele — isso é abordado conceitualmente, mas omitido aqui por questões de custo (o Azure Firewall custa ~$1/hora ocioso).
resource "azurerm_virtual_network" "hub" {
name = "certlabpro-az-305-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"
resource_group_name = azurerm_resource_group.main.name
virtual_network_name = azurerm_virtual_network.hub.name
address_prefixes = ["10.0.1.0/24"]
}
resource "azurerm_virtual_network" "spoke" {
name = "certlabpro-az-305-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_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
}
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
}O Key Vault é a primitiva de segredos e certificados do AZ-305. Duas grandes decisões arquitetônicas que o exame testa: RBAC vs Políticas de Acesso (RBAC é o padrão moderno; Políticas de Acesso são legadas), e soft-delete + proteção contra purga (o soft-delete está ativado por padrão; a proteção contra purga torna a janela de soft-delete não substituível — necessária para alguns regimes de conformidade).
Habilitamos a autorização RBAC e atribuímos o principal atual do Terraform como Administrador do Key Vault para que os recursos subsequentes de segredos/certificados funcionem. Perguntas do AZ-305 sobre "o aplicativo não consegue ler a senha do banco de dados" 90% das vezes terminam com "porque a identidade gerenciada não tinha o papel de Usuário de Segredos do Key Vault no cofre".
resource "azurerm_key_vault" "main" {
name = "kv-az305-${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
tenant_id = data.azurerm_client_config.current.tenant_id
sku_name = "standard"
enable_rbac_authorization = true
soft_delete_retention_days = 7 # 7 minimum; 90 for purge protection in production
purge_protection_enabled = false # set true for production / compliance
public_network_access_enabled = true
tags = local.tags
}
resource "azurerm_role_assignment" "kv_admin_self" {
scope = azurerm_key_vault.main.id
role_definition_name = "Key Vault Administrator"
principal_id = data.azurerm_client_config.current.object_id
}O Front Door é a resposta para o AZ-305 em cenários de balanceador de carga global + WAF + CDN. O exame o testa contra três alternativas: Application Gateway (camada 7 regional), Traffic Manager (baseado em DNS, sem trânsito de tráfego) e Load Balancer (camada 4 regional). O Front Door é a resposta certa para qualquer cenário de "usuários globalmente distribuídos + HTTPS + WAF + cache".
Provisionamos um perfil Front Door + endpoint + um grupo de origem stub. Em produção, você conectaria um Web App ou ingresso AKS como origem; para o laboratório, a forma da topologia é o que as perguntas do AZ-305 testam. A camada Standard suporta os recursos de segurança e roteamento que o exame espera (WAF, regras personalizadas, afinidade de sessão); a Premium adiciona origens de link privado para acesso de backend totalmente privado.
resource "azurerm_cdn_frontdoor_profile" "main" {
name = "certlabpro-az-305-fd"
resource_group_name = azurerm_resource_group.main.name
sku_name = "Standard_AzureFrontDoor"
tags = local.tags
}
resource "azurerm_cdn_frontdoor_endpoint" "main" {
name = "certlabpro-az-305-${random_id.suffix.hex}"
cdn_frontdoor_profile_id = azurerm_cdn_frontdoor_profile.main.id
tags = local.tags
}
resource "azurerm_cdn_frontdoor_origin_group" "main" {
name = "app-origins"
cdn_frontdoor_profile_id = azurerm_cdn_frontdoor_profile.main.id
session_affinity_enabled = false
load_balancing {
sample_size = 4
successful_samples_required = 3
}
health_probe {
path = "/"
request_type = "HEAD"
protocol = "Https"
interval_in_seconds = 30
}
}O domínio Design de armazenamento e integração de dados do AZ-305, juntamente com o Design de continuidade de negócios, dependem da observabilidade em torno das peças da arquitetura. Criamos um workspace do Log Analytics e conectamos os logs de acesso do Front Door + logs de auditoria do Key Vault a ele.
Com a infraestrutura de diagnóstico em vigor, a arquitetura de referência do AZ-305 é moldada: ingresso global (Front Door) → rede hub-spoke → spoke de carga de trabalho → camada de segredos (Key Vault) → malha de observabilidade (Log Analytics). Cada adição arquitetônica (Application Gateway atrás do Front Door, Cosmos DB no spoke, Logic Apps no hub) se conecta a esta base.
resource "azurerm_log_analytics_workspace" "main" {
name = "certlabpro-az-305-logs"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
sku = "PerGB2018"
retention_in_days = 30
tags = local.tags
}
resource "azurerm_monitor_diagnostic_setting" "key_vault" {
name = "diag"
target_resource_id = azurerm_key_vault.main.id
log_analytics_workspace_id = azurerm_log_analytics_workspace.main.id
enabled_log {
category = "AuditEvent"
}
metric {
category = "AllMetrics"
enabled = true
}
}
resource "azurerm_monitor_diagnostic_setting" "front_door" {
name = "diag"
target_resource_id = azurerm_cdn_frontdoor_profile.main.id
log_analytics_workspace_id = azurerm_log_analytics_workspace.main.id
enabled_log {
category = "FrontDoorAccessLog"
}
enabled_log {
category = "FrontDoorHealthProbeLog"
}
}terraform destroy derruba tudo. O perfil do Front Door é o item que fatura 24/7 (~$35/mês). Destrua-o prontamente se não estiver explorando. O Key Vault tem soft-delete de 7 dias aqui (configurável até 90); definimos purge_soft_delete_on_destroy = true no provedor para que o destroy realmente limpe o cofre em vez de deixar o namespace reservado.
O AZ-305 abrange uma enorme superfície arquitetônica — Application Gateway, Azure Firewall, VPN Gateway + ExpressRoute, Private Link / Private Endpoints, Azure Active Directory B2B / B2C, Acesso Condicional, Gerenciamento de Identidade Privilegiada, AKS em escala arquitetônica, Service Fabric, Azure API Management, implantações emparelhadas multi-região, Cosmos / SQL / Armazenamento geo-replicados, designs BCDR (Site Recovery), Gerenciamento de Custos em escala, designs de Landing Zone e iniciativas de Política do Azure.
Nós nos limitamos às quatro primitivas fundamentais porque elas são o substrato que todo design de múltiplos componentes do AZ-305 assume. O App Gateway se encaixa no hub-spoke do Passo 2. O AKS é implantado na VNet spoke. O Cosmos DB expõe endpoints privados no spoke. O Defender for Cloud lê o workspace do Log Analytics. Arquitetura é composição; este laboratório oferece as formas básicas.
Para cobertura das superfícies não provisionadas, as seções Navegar, Guia e Editorial desta página de certificação contêm material conceitual.