Última revisión: mayo de 2026
Crea los servicios de AWS del examen AZ-305 con Terraform puro: bloque a bloque, cada uno vinculado a un dominio del examen. El mismo código funciona en OpenTofu.
Al final de este laboratorio, habrá aprovisionado, con Terraform puro, el núcleo de la arquitectura de referencia AZ-305 — una topología de VNet de tipo hub-spoke (un hub, un spoke, interconectados), un Azure Front Door para la entrada HTTPS global, un Key Vault para la gestión de secretos y certificados con autorización RBAC, y la infraestructura de diagnóstico que todo diseño de Arquitecto-Experto asume. Cada bloque se vincula a un dominio de diseño AZ-305.
Pegue los fragmentos en un único main.tf, ejecute terraform init, y luego terraform apply paso a paso.
>= 1.5 o OpenTofu >= 1.6.az login).La pila completa cuesta ~$36/mes en inactividad. Front Door es la trampa de costos — destrúyalo rápidamente si no está probando activamente.
Inicio estándar de Azure. AZ-305 espera que elija el par eastus / westus para cualquier pregunta de “dos regiones” — son el par de regiones canónico de AZ-305 para pruebas de latencia y escenarios de conmutación por error en regiones emparejadas.
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 es el diseño de red de referencia de AZ-305: una VNet hub central aloja servicios compartidos (firewall, puerta de enlace VPN, DNS), y las VNets spoke alojan cargas de trabajo. Los spokes se emparejan con el hub bidireccionalmente; el tráfico de spoke a spoke transita a través del hub. El examen evalúa esta topología sin cesar porque es la base de cualquier zona de aterrizaje de Azure con múltiples cargas de trabajo.
Construimos el hub-spoke más simple posible: una VNet hub (10.0.0.0/16), una spoke (10.1.0.0/16), emparejamiento bidireccional. Los diseños reales de hub-spoke añaden Azure Firewall en el hub y tablas de rutas next_hop_in_ip_address que fuerzan el tráfico spoke a pasar a través de él — esto se cubre conceptualmente pero se omite aquí por el costo (Azure Firewall cuesta ~$1/hora en inactividad).
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
}Key Vault es el primitivo de secretos y certificados de AZ-305. El examen evalúa dos grandes decisiones arquitectónicas: RBAC frente a Políticas de Acceso (RBAC es el valor predeterminado moderno; las Políticas de Acceso son heredadas), y la eliminación temporal + protección contra purga (la eliminación temporal está activada por defecto; la protección contra purga hace que la ventana de eliminación temporal no sea anulable — requerida para algunos regímenes de cumplimiento).
Habilitamos la autorización RBAC y asignamos el principal actual de Terraform como Administrador de Key Vault para que los recursos de secretos/certificados subsiguientes funcionen. Las preguntas de AZ-305 sobre “la aplicación no puede leer la contraseña de su base de datos” el 90% de las veces terminan con “porque la identidad administrada no tenía el rol Usuario de secretos de Key Vault en el almacén”.
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
}Front Door es la respuesta de AZ-305 para balanceador de carga global + WAF + CDN. El examen lo evalúa frente a tres alternativas: Application Gateway (capa 7 regional), Traffic Manager (basado en DNS, sin tránsito de tráfico) y Load Balancer (capa 4 regional). Front Door es la respuesta correcta para cualquier escenario de “usuarios distribuidos globalmente + HTTPS + WAF + caching”.
Aprovisionamos un perfil de Front Door + un endpoint + un grupo de origen de stub. En producción, conectaría una Web App o un ingreso de AKS como origen; para el laboratorio, la forma de la topología es lo que evalúan las preguntas de AZ-305. El nivel Estándar admite las características de seguridad y enrutamiento que el examen espera (WAF, reglas personalizadas, afinidad de sesión); Premium añade orígenes de enlace privado para un acceso 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
}
}El dominio Diseñar almacenamiento e integración de datos de AZ-305 y Diseñar continuidad del negocio dependen de tener observabilidad en torno a las piezas de la arquitectura. Creamos un espacio de trabajo de Log Analytics y conectamos los registros de acceso de Front Door + los registros de auditoría de Key Vault a él.
Con la infraestructura de diagnóstico en su lugar, la arquitectura de referencia AZ-305 toma forma: ingreso global (Front Door) → red hub-spoke → spoke de carga de trabajo → capa de secretos (Key Vault) → tejido de observabilidad (Log Analytics). Cada adición arquitectónica adicional (Application Gateway detrás de Front Door, Cosmos DB en el spoke, Logic Apps en el 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 desmantela todo. El perfil de Front Door es el elemento que factura 24/7 (~$35/mes). Destrúyalo rápidamente si no lo está explorando. Key Vault tiene aquí una eliminación temporal de 7 días (configurable hasta 90); establecemos purge_soft_delete_on_destroy = true en el proveedor para que destroy purgue realmente el almacén en lugar de dejar el espacio de nombres reservado.
AZ-305 cubre una enorme superficie arquitectónica — Application Gateway, Azure Firewall, VPN Gateway + ExpressRoute, Private Link / Private Endpoints, Azure Active Directory B2B / B2C, Acceso Condicional, Privileged Identity Management, AKS a escala arquitectónica, Service Fabric, Azure API Management, implementaciones emparejadas multirregión, Cosmos / SQL / Storage geo-replicados, diseños BCDR (Site Recovery), Gestión de Costos a escala, diseños de Landing Zone y Azure Policy initiatives.
Nos ceñimos a los cuatro primitivos fundamentales porque son el sustrato que asume todo diseño de múltiples componentes de AZ-305. App Gateway se ubica en el hub-spoke del Paso 2. AKS se despliega en la VNet spoke. Cosmos DB expone puntos finales privados en el spoke. Defender for Cloud lee el espacio de trabajo de Log Analytics. La arquitectura es composición; este laboratorio le proporciona las formas básicas.
Para cubrir las superficies no aprovisionadas, las secciones Buscar, Manual y Editorial de esta página de certificación contienen material conceptual.