Última revisión: mayo de 2026
Crea los servicios de AWS del examen AZ-400 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 simple, la infraestructura del lado de AZ-400 de una canalización de CI/CD: un Azure Container Registry para publicar imágenes, un clúster de AKS como objetivo de implementación con identidad administrada e integración de Log Analytics, un Key Vault para secretos de la canalización, y las asignaciones de roles que conectan todo a la identidad de kubelet de AKS para que pueda extraer imágenes y leer secretos sin credenciales en el YAML de la canalización.
Pegue los fragmentos en un único archivo main.tf, ejecute terraform init, luego terraform apply paso a paso.
>= 1.5 o OpenTofu >= 1.6.az login).AKS es el principal costo aquí:
~$75/mes en total mientras se ejecuta. El patrón anti-costo de AZ-400 más probado es dejar un clúster de AKS sin usar en ejecución; destrúyalo o deténgalo cuando no esté en uso.
Introducción estándar de Azure.
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-400"
ManagedBy = "terraform"
}
}
resource "azurerm_resource_group" "main" {
name = "certlabpro-az-400-rg"
location = "eastus"
tags = local.tags
}ACR es donde la canalización de CI empuja las imágenes de contenedor que la canalización de CD extrae. AZ-400 prueba este límite de push/pull como un patrón de seguridad: la canalización de compilación obtiene AcrPush, el objetivo de implementación obtiene AcrPull, y nunca se encontrarán.
Usamos el nivel Básico, el más barato, con un único objetivo de replicación. Premium añade geo-replicación y la función Content Trust (firma de imágenes); ambos son temas del examen AZ-400 pero son prohibitivos en cuanto a costos para el laboratorio.
resource "azurerm_container_registry" "main" {
name = "acrcertlabpro${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
sku = "Basic"
admin_enabled = false # admin user disabled — Entra-only access
tags = local.tags
}AKS es el objetivo de implementación preferido de AZ-400 para cargas de trabajo de contenedores. Usamos una identidad administrada asignada por el sistema (el valor predeterminado moderno; la autenticación de entidad de servicio se está deprecando), un único y pequeño grupo de nodos del sistema, y azure_policy_enabled = true (la respuesta de AZ-400 para Implementar conformidad para la aplicación de políticas a nivel de clúster mediante el complemento de Azure Policy).
La integración del espacio de trabajo de Log Analytics + agente de OMS es la respuesta de AZ-400 para Implementar instrumentación para la observabilidad a nivel de clúster: cada registro de pod, cada métrica de nodo, cada evento de auditoría de Kubernetes llega a Log Analytics para consultas KQL.
resource "azurerm_log_analytics_workspace" "main" {
name = "log-az400"
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_kubernetes_cluster" "main" {
name = "aks-az400"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
dns_prefix = "azaks${random_id.suffix.hex}"
default_node_pool {
name = "system"
node_count = 1
vm_size = "Standard_D2s_v3"
}
identity {
type = "SystemAssigned"
}
oms_agent {
log_analytics_workspace_id = azurerm_log_analytics_workspace.main.id
}
azure_policy_enabled = true
tags = local.tags
}
# Grant the AKS kubelet identity AcrPull on the registry from Step 2.
# This is the AZ-400 password-less image-pull pattern.
resource "azurerm_role_assignment" "aks_acr_pull" {
scope = azurerm_container_registry.main.id
role_definition_name = "AcrPull"
principal_id = azurerm_kubernetes_cluster.main.kubelet_identity[0].object_id
}Los secretos de la canalización — claves de API, credenciales de implementación, tokens de terceros — nunca deben residir en el YAML de la canalización. El dominio Implementar seguridad y validar bases de código para el cumplimiento de AZ-400 prueba este patrón de referencia de Key Vault en la tarea de canalización: las canalizaciones referencian secretos por nombre desde Key Vault en tiempo de ejecución.
Concedemos a la identidad de kubelet de AKS el rol de Usuario de secretos de Key Vault para que los pods implementados también puedan leer secretos a través del controlador CSI de Secrets Store (el mecanismo de montaje en clúster para secretos respaldados por Key Vault). Con el rol establecido, cada pod que necesita una contraseña de base de datos la lee a través del controlador CSI, no desde una variable de entorno incluida en la imagen.
resource "azurerm_key_vault" "main" {
name = "kv-az400-${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
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
}
resource "azurerm_role_assignment" "aks_kv_reader" {
scope = azurerm_key_vault.main.id
role_definition_name = "Key Vault Secrets User"
principal_id = azurerm_kubernetes_cluster.main.kubelet_identity[0].object_id
}Log Analytics maneja las señales a nivel de clúster (métricas de nodos, registros de pods); App Insights maneja las señales a nivel de aplicación (seguimiento de solicitudes, telemetría de excepciones, seguimiento de dependencias, rastreos distribuidos). AZ-400 Implementar instrumentación prueba ambas capas; el examen espera que las conecte como un par, con App Insights en modo basado en espacio de trabajo utilizando el espacio de trabajo de Log Analytics del Paso 3.
Con esta pieza final en su lugar, la forma de destino de CI/CD de AZ-400 está completa: ACR recibe imágenes de compilación, AKS las implementa, Key Vault proporciona secretos, Log Analytics + App Insights observan el resultado. El YAML de la canalización (Azure DevOps o GitHub Actions) lo impulsa todo, y eso reside en el repositorio de origen, no en Terraform.
resource "azurerm_application_insights" "main" {
name = "appi-az400"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
workspace_id = azurerm_log_analytics_workspace.main.id
application_type = "web"
tags = local.tags
}terraform destroy derriba todo. AKS es el elemento que factura $70/mes por el nodo del sistema; destrúyalo rápidamente. ACR Básico cuesta $5/mes. El espacio de trabajo de Log Analytics retiene datos durante el período de retención (30 días aquí) incluso después de la destrucción de los consumidores; el propio espacio de trabajo se destruye limpiamente.
AZ-400 cubre Azure DevOps Services y las superficies de GitHub-on-Azure que no residen en el proveedor azurerm: organizaciones de Azure DevOps, proyectos, repositorios, canalizaciones, grupos de agentes, entornos, grupos de variables, conexiones de servicio (todo en el proveedor azuredevops separado), GitHub Advanced Security para Azure DevOps y las reglas de Application Insights Live Metrics + Smart Detection.
Nos centramos en la infraestructura de destino de implementación porque es el sustrato sobre el que las canalizaciones de AZ-400 realmente se implementan. Una vez que ACR + AKS + Key Vault + observabilidad están en su lugar, el YAML de la canalización (en su repositorio de origen, no en Terraform) realiza el trabajo de compilación-envío-implementación a través de las tareas estándar de Azure CLI.
Para la cobertura de los patrones de Azure DevOps Services + GitHub Actions, consulte las secciones Buscar, Manual y Editorial de esta página de certificación.