Última revisión: mayo de 2026
Crea los servicios de AWS del examen DP-420 con Terraform puro: bloque a bloque, cada uno vinculado a un dominio del examen. El mismo código funciona en OpenTofu.
Al finalizar este laboratorio, habrá aprovisionado, con Terraform plano, una cuenta de Cosmos DB configurada para los patrones del examen DP-420: API Core (SQL), rendimiento de autoescala con un límite máximo, una base de datos + contenedor con una clave de partición bien pensada, una política de indexación personalizada que excluye las rutas de escritura intensiva, restauración a un momento dado habilitada y copia de seguridad continua. Esta es la línea de base de referencia DP-420.
Coloque los fragmentos en un único main.tf, ejecute terraform init, luego terraform apply paso a paso.
>= 1.5 u OpenTofu >= 1.6.az login).Las preguntas de costo del DP-420 tratan sobre los modos de capacidad de Cosmos DB:
max_throughput = 1000).Este laboratorio utiliza autoescala con un máximo de 1000 RU/s — factura mínima de ~$24/mes incluso con cero tráfico (la autoescala factura un mínimo del 10% del máximo de RU/s). Cambie autoscale_settings a la capacidad serverless para un costo de $0 en inactividad. Destrúyalo rápidamente si no lo cambia.
Inicio estándar de Azure. Los nombres de las cuentas de Cosmos DB deben ser globalmente únicos (publicados en DNS como <name>.documents.azure.com) — 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
}
data "azurerm_client_config" "current" {}
locals {
tags = {
Project = "certlabpro-dp-420"
ManagedBy = "terraform"
}
}
resource "azurerm_resource_group" "main" {
name = "certlabpro-dp-420-rg"
location = "eastus"
tags = local.tags
}El DP-420, en el tema Implementar, administrar y monitorear una solución de Cosmos DB, evalúa directamente los modos de copia de seguridad: Periódica (predeterminada; 2 copias cada 4 horas retenidas 8 días) versus Continua (restauración a un momento dado en cualquier segundo dentro de 30 o 7 días). La continua es la respuesta de nivel de producción; usamos el nivel de 7 días para el laboratorio para mantener el costo bajo.
local_authentication_disabled = true fuerza la autenticación con Entra ID — la respuesta de producción del DP-420. El modelo de RBAC del plano de datos de Cosmos es uno de los temas de examen más probados.
resource "azurerm_cosmosdb_account" "main" {
name = "cosmos-dp420-${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
offer_type = "Standard"
kind = "GlobalDocumentDB" # Core (SQL) API — DP-420 default
consistency_policy {
consistency_level = "BoundedStaleness"
max_interval_in_seconds = 10
max_staleness_prefix = 100
}
geo_location {
location = azurerm_resource_group.main.location
failover_priority = 0
}
backup {
type = "Continuous"
tier = "Continuous7Days" # cheapest continuous-backup tier
}
local_authentication_disabled = true # Entra auth only
tags = local.tags
}El contenedor es donde el DP-420 dedica la mayor parte del tiempo del examen. Elegimos /userId como clave de partición para el ejemplo — alta cardinalidad (buena distribución), el patrón de acceso típico es obtener los registros de mi usuario, por lo que leemos dentro de la partición (más rápido, RU/s más baratas).
La política de indexación es el siguiente gran factor de costo del DP-420. Por defecto, Cosmos indexa cada propiedad — consultas rápidas, escrituras costosas. Excluimos /largeBlob/? (una ruta que contiene datos no estructurados pesados que nunca consultamos) y /_etag/? (administrada automáticamente, sin valor para indexar). Las políticas de indexación personalizadas se evalúan explícitamente como la respuesta de optimización de costos para cargas de trabajo intensivas en escritura.
Autoescala máxima de 1000 RU/s — factura el 10% del mínimo máximo en inactividad (100 RU/s = ~$24/mes). Para una base de datos de producción real, modelaría las RU/s esperadas por solicitud, multiplicaría por las QPS sostenidas, multiplicaría por 1.5x de seguridad y establecería el máximo en ese número.
resource "azurerm_cosmosdb_sql_database" "app" {
name = "appdb"
resource_group_name = azurerm_resource_group.main.name
account_name = azurerm_cosmosdb_account.main.name
autoscale_settings {
max_throughput = 1000
}
}
resource "azurerm_cosmosdb_sql_container" "user_events" {
name = "user-events"
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"]
indexing_policy {
indexing_mode = "consistent"
included_path {
path = "/*"
}
excluded_path {
path = "/largeBlob/?"
}
excluded_path {
path = "/_etag/?"
}
}
default_ttl = -1 # explicit opt-in (-1 means no auto-expiry); set to seconds for TTL
}Con local_authentication_disabled = true del Paso 2, la única forma de leer o escribir en el contenedor es a través de la autenticación de Entra ID + RBAC del plano de datos de Cosmos. El rol Cosmos DB Built-in Data Contributor integrado (GUID 00000000-0000-0000-0000-000000000002) otorga acceso completo de lectura/escritura en el ámbito de la cuenta.
El DP-420 evalúa la distinción de roles plano de control vs. plano de datos: el RBAC del plano de control (Azure RBAC) gestiona la cuenta en sí (crear contenedor, cambiar el rendimiento); el RBAC del plano de datos (específico de Cosmos) gestiona los documentos dentro de los contenedores. Son asignaciones de roles separadas; una no implica la otra.
resource "azurerm_cosmosdb_sql_role_assignment" "me_data_contributor" {
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 = data.azurerm_client_config.current.object_id
scope = azurerm_cosmosdb_account.main.id
}terraform destroy elimina todo. Las cuentas de Cosmos DB tienen una ventana de eliminación suave de 7 días — el nombre permanece reservado durante ese período. El rendimiento de autoescala deja de facturarse inmediatamente al eliminarse.
El DP-420 cubre muchas características de Cosmos DB que este laboratorio no puede incluir: Synapse Link para consultas analíticas, procesador de cambio de feed, Cosmos DB para MongoDB / Cassandra / Gremlin / Table (solo usamos Core SQL), escrituras multirregión (multi-maestro), puntos finales privados, claves administradas por el cliente, claves de partición jerárquicas (vista previa en el momento de la redacción) y el modo de capacidad sin servidor de Cosmos DB en profundidad.
Nos apegamos a las primitivas de clave de partición + indexación + autoescala + RBAC + copia de seguridad continua porque son los atributos de DP-420 más probados. Las escrituras multirregión se añaden a esta base a través de bloques geo_location adicionales; los puntos finales privados se añaden a través de azurerm_private_endpoint; Synapse Link es una única opción de atributo. Entienda bien la base; luego añada por patrón.
Para una cobertura servicio por servicio, consulte las secciones Buscar y Editorial de esta página de certificación.