Última revisão: maio de 2026
Construa os serviços da AWS do exame DP-420 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, uma conta do Cosmos DB configurada para os padrões do exame DP-420 — API Core (SQL), taxa de transferência de dimensionamento automático com limite máximo, um banco de dados + contêiner com uma chave de partição bem pensada, uma política de indexação personalizada que exclui caminhos com muitas gravações, restauração pontual habilitada e backup contínuo. Esta é a linha de base de referência do DP-420.
Cole os trechos de código em um único arquivo main.tf, execute terraform init e depois terraform apply passo a passo.
>= 1.5 ou OpenTofu >= 1.6.az login).As perguntas sobre custo do DP-420 são sobre os modos de capacidade do Cosmos DB:
max_throughput = 1000).Este laboratório usa dimensionamento automático com no máximo 1000 RU/s — custo mínimo de aproximadamente $24/mês, mesmo com tráfego zero (o dimensionamento automático fatura no mínimo 10% dos RU/s máximos). Mude autoscale_settings para a capacidade serverless para um custo ocioso de $0. Destrua prontamente se não fizer a mudança.
Abertura padrão do Azure. Os nomes das contas do Cosmos DB devem ser globalmente únicos (publicados no DNS como <name>.documents.azure.com) — random_id evita colisões.
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
}O DP-420 Implementar, gerenciar e monitorar uma solução Cosmos DB testa diretamente os modos de backup: Periódico (padrão; 2 backups a cada 4 horas retidos por 8 dias) vs Contínuo (restauração pontual para qualquer segundo dentro de 30 ou 7 dias). O Contínuo é a resposta de nível de produção; usamos a camada de 7 dias para o laboratório para manter o custo baixo.
local_authentication_disabled = true força a autenticação Entra ID — a resposta de produção do DP-420. O modelo RBAC do plano de dados do Cosmos é um dos tópicos mais testados no exame.
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
}O contêiner é onde o DP-420 dedica a maior parte do tempo do exame. Escolhemos /userId como a chave de partição para o exemplo — alta cardinalidade (boa distribuição), o padrão de acesso típico é obter os registros do meu usuário, então lemos dentro da partição (RU/s mais rápido e barato).
A política de indexação é o próximo grande fator de custo do DP-420. Por padrão, o Cosmos indexa todas as propriedades — consultas rápidas, gravações caras. Excluímos /largeBlob/? (um caminho que contém dados não estruturados pesados que nunca consultamos) e /_etag/? (gerenciado automaticamente, sem valor para indexar). As políticas de indexação personalizadas são explicitamente testadas como a resposta de otimização de custos para cargas de trabalho com muitas gravações.
Dimensionamento automático máximo de 1000 RU/s — fatura 10% do mínimo máximo em modo ocioso (100 RU/s = ~$24/mês). Para um banco de dados de produção real, você modelaria os RU/s esperados por solicitação, multiplicaria pelo QPS sustentado, multiplicaria por 1,5x de segurança e definiria o máximo para esse 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
}Com local_authentication_disabled = true da Etapa 2, a única maneira de ler ou gravar no contêiner é via autenticação Entra ID + RBAC do plano de dados do Cosmos. A função incorporada Cosmos DB Built-in Data Contributor (GUID 00000000-0000-0000-0000-000000000002) concede acesso total de leitura/gravação no escopo da conta.
O DP-420 testa a distinção de função plano de controle vs plano de dados: o RBAC do plano de controle (Azure RBAC) gerencia a própria conta (criar contêiner, alterar taxa de transferência); o RBAC do plano de dados (específico do Cosmos) gerencia documentos dentro dos contêineres. São atribuições de função separadas; uma não implica na outra.
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 derruba tudo. As contas do Cosmos DB têm uma janela de exclusão suave de 7 dias — o nome permanece reservado durante essa janela. A taxa de transferência de dimensionamento automático para de ser cobrada imediatamente após a destruição.
O DP-420 abrange muitos recursos do Cosmos DB que este laboratório não pode incluir — Synapse Link para consultas analíticas, processador de feed de alterações, Cosmos DB para MongoDB / Cassandra / Gremlin / Table (usamos apenas Core SQL), gravações multirregião (multimaster), endpoints privados, chaves gerenciadas pelo cliente, chaves de partição hierárquicas (visualização no momento da escrita) e o modo de capacidade serverless do Cosmos DB em profundidade.
Nos concentramos nas primitivas de chave de partição + indexação + dimensionamento automático + RBAC + backup contínuo porque são os atributos DP-420 mais testados. Gravações multirregião são adicionadas a esta base através de blocos geo_location adicionais; endpoints privados são adicionados via azurerm_private_endpoint; Synapse Link é um único atributo de alternância. Faça a base corretamente; adicione por padrão.
Para cobertura serviço a serviço, consulte as seções Navegar e Editorial desta página de certificação.