Última revisión: mayo de 2026
Crea los servicios de AWS del examen AZ-204 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 aplicación web canónica de Azure PaaS: un Plan de App Service + Aplicación web Linux con identidad administrada, una cuenta de Cosmos DB para el estado, un espacio de trabajo de Application Insights para telemetría y una Cuenta de Almacenamiento que la aplicación puede usar para el trabajo con blobs/archivos. Cinco bloques; la arquitectura de referencia AZ-204.
Copie los fragmentos en un único main.tf, ejecute terraform init, luego terraform apply paso a paso.
>= 1.5 o OpenTofu >= 1.6.az login).az webapp deploy). Este laboratorio aprovisiona el entorno de infraestructura; la implementación de código es el dominio de Implementar DevOps de AZ-204 y se encuentra fuera de Terraform.Todo el stack inactivo cuesta aproximadamente ~$13/mes con el plan B1. Cambie a F1 para pruebas gratuitas (elimine la identidad administrada en el Paso 3) o destruya rápidamente.
Apertura estándar de Azure. Los nombres de las aplicaciones web de App Service deben ser globalmente únicos (publicados en DNS como <name>.azurewebsites.net); random_id evita colisiones.
terraform {
required_version = ">= 1.5"
required_providers {
azurerm = { source = "hashicorp/azurerm", version = "~> 4.0" }
random = { source = "hashicorp/random", version = "~> 3.6" }
}
}
provider "azurerm" {
features {}
}
resource "random_id" "suffix" {
byte_length = 3
}
locals {
tags = {
Project = "certlabpro-az-204"
ManagedBy = "terraform"
}
}
resource "azurerm_resource_group" "main" {
name = "certlabpro-az-204-rg"
location = "eastus"
tags = local.tags
}AZ-204 espera que utilice Cosmos DB siempre que la pregunta mencione "milisegundos de un solo dígito a escala", "distribuido globalmente" o "NoSQL con consultas similares a SQL". El modo de capacidad sin servidor es la opción predeterminada de optimización de costos: pago por RU, $0 inactivo, probado en exámenes como la elección correcta para entornos de bajo volumen / desarrollo.
Creamos la cuenta, una base de datos debajo y un contenedor con una clave de partición. La elección de la clave de partición (/userId aquí) es la pregunta de Cosmos más evaluada en AZ-204: las claves de partición deficientes causan particiones activas; las buenas distribuyen la carga de manera uniforme. El examen prueba este patrón con escenarios de cardinalidad.
resource "azurerm_cosmosdb_account" "main" {
name = "certlabpro-az-204-${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
offer_type = "Standard"
kind = "GlobalDocumentDB"
capabilities {
name = "EnableServerless"
}
consistency_policy {
consistency_level = "Session"
}
geo_location {
location = azurerm_resource_group.main.location
failover_priority = 0
}
tags = local.tags
}
resource "azurerm_cosmosdb_sql_database" "app" {
name = "appdb"
resource_group_name = azurerm_resource_group.main.name
account_name = azurerm_cosmosdb_account.main.name
}
resource "azurerm_cosmosdb_sql_container" "users" {
name = "users"
resource_group_name = azurerm_resource_group.main.name
account_name = azurerm_cosmosdb_account.main.name
database_name = azurerm_cosmosdb_sql_database.app.name
partition_key_paths = ["/userId"]
}Los dominios Implementar seguridad de Azure y Monitorizar, solucionar problemas y optimizar de AZ-204 se apoyan en Application Insights, el servicio APM para trazas distribuidas, seguimiento de dependencias, captura de excepciones y métricas en vivo. Las instancias modernas de App Insights requieren un espacio de trabajo de Log Analytics como su backend de datos (el modo basado en espacio de trabajo; el modo clásico está en desuso).
Creamos ambos y la clave de instrumentación + la cadena de conexión se obtienen como atributos de App Insights, conectados al App Service en el Paso 4 a través de la configuración de la aplicación.
resource "azurerm_log_analytics_workspace" "main" {
name = "certlabpro-az-204-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_application_insights" "main" {
name = "certlabpro-az-204-appi"
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
}App Service es el host web PaaS preferido en AZ-204. El Plan de App Service es el contenedor de cómputo (piense en EC2 debajo de la abstracción); las aplicaciones web dentro de él comparten el cómputo del plan. Usamos un plan Linux B1 y una única aplicación web con el tiempo de ejecución Node.js 20; cambie a python, dotnet, java o php para que coincida con su stack.
La identidad administrada asignada por el sistema es la respuesta de credenciales sin contraseña de AZ-204 para que la aplicación acceda a otros servicios de Azure (Key Vault, Storage, Cosmos DB). Una vez que se le otorgan roles RBAC en esos recursos, el App Service los llama con tokens emitidos por Entra, sin cadenas de conexión en la configuración de la aplicación.
El bloque app_settings inyecta variables de entorno: cadena de conexión de App Insights, punto final de Cosmos y una bandera. La aplicación web comienza como un shell vacío; el código se implementa por separado. El laboratorio trata sobre cómo configurar correctamente la infraestructura.
resource "azurerm_service_plan" "main" {
name = "certlabpro-az-204-plan"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
os_type = "Linux"
sku_name = "B1"
tags = local.tags
}
resource "azurerm_linux_web_app" "main" {
name = "certlabpro-az-204-${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_service_plan.main.location
service_plan_id = azurerm_service_plan.main.id
https_only = true
site_config {
always_on = true
application_stack {
node_version = "20-lts"
}
}
identity {
type = "SystemAssigned"
}
app_settings = {
APPLICATIONINSIGHTS_CONNECTION_STRING = azurerm_application_insights.main.connection_string
COSMOS_ENDPOINT = azurerm_cosmosdb_account.main.endpoint
WEBSITES_ENABLE_APP_SERVICE_STORAGE = "false"
}
tags = local.tags
}
# Grant the web app's managed identity Cosmos DB data-plane access
# (Cosmos DB Built-in Data Contributor — the AZ-204 password-less pattern).
resource "azurerm_cosmosdb_sql_role_assignment" "webapp" {
resource_group_name = azurerm_resource_group.main.name
account_name = azurerm_cosmosdb_account.main.name
role_definition_id = "${azurerm_cosmosdb_account.main.id}/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002"
principal_id = azurerm_linux_web_app.main.identity[0].principal_id
scope = azurerm_cosmosdb_account.main.id
}Toda aplicación web de Azure PaaS eventualmente necesita almacenamiento de blobs/archivos: archivos cargados, avatares de usuario, PDFs generados, imágenes procesadas. Aprovisionamos la cuenta con valores predeterminados seguros estándar y otorgamos a la identidad administrada de la aplicación el rol Colaborador de datos de blobs de almacenamiento para que la aplicación pueda leer/escribir blobs sin una cadena de conexión.
Esto cierra el ciclo de AZ-204 Desarrollar soluciones de cómputo de Azure: aplicación + estado (Cosmos) + telemetría (App Insights) + almacenamiento de blobs, todo conectado a través de identidad administrada en lugar de secretos. Cada patrón adicional de AZ-204 (cola de Service Bus, tema de Event Grid, secretos de Key Vault, integración de Logic App) se conecta de la misma manera: otorgue a la identidad administrada el rol correcto en el ámbito adecuado.
resource "azurerm_storage_account" "app_blobs" {
name = "az204app${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
account_tier = "Standard"
account_replication_type = "LRS"
account_kind = "StorageV2"
https_traffic_only_enabled = true
min_tls_version = "TLS1_2"
allow_nested_items_to_be_public = false
tags = local.tags
}
resource "azurerm_role_assignment" "webapp_blobs" {
scope = azurerm_storage_account.app_blobs.id
role_definition_name = "Storage Blob Data Contributor"
principal_id = azurerm_linux_web_app.main.identity[0].principal_id
}terraform destroy desmantela todo. El Plan de App Service B1 es el elemento que factura 24/7 (~$13/mes). El plan permanece en el RG incluso después de eliminar la aplicación web si escala incorrectamente; terraform destroy elimina ambos. Cosmos DB sin servidor y App Insights detienen la facturación inmediatamente al destruirlos.
AZ-204 cubre más servicios para desarrolladores que este laboratorio no puede incluir: Azure Functions (sin servidor controlado por eventos), Container Apps, AKS, Service Bus, Event Grid, Event Hubs, Logic Apps, Durable Functions, API Management, Front Door, CDN, Notification Hubs, SignalR y Azure Key Vault para el almacenamiento de secretos (un seguimiento común de AZ-204 después de la identidad administrada).
Nos adherimos a la base de App Service + Cosmos + App Insights + Storage porque es la forma de aplicación web PaaS más probada en el examen, y cualquier otro patrón de AZ-204 (Functions, Service Bus, Key Vault) se conecta a esta base a través de identidad administrada + RBAC.
Para las superficies anteriores, consulte las secciones Buscar, Manual y Editorial de esta página de certificación.