最后审核时间:2026年5月
使用原生 Terraform 构建 DP-420 考试中的 AWS 服务——每次构建一个代码块,并紧扣考试领域。相同的代码可在 OpenTofu 上运行。
在本实验结束时,您将使用纯 Terraform 预置一个 Cosmos DB 账户,该账户已根据 DP-420 考试模式进行配置——核心 (SQL) API、具有最大上限的自动扩缩吞吐量、一个带有精心设计的分区键的数据库+容器、一个排除写密集型路径的自定义索引策略、启用时间点恢复以及连续备份。这是 DP-420 的参考基线。
将代码片段放入单个 main.tf 文件中,运行 terraform init,然后逐步运行 terraform apply。
>= 1.5 或 OpenTofu >= 1.6。az login)。DP-420 成本问题涉及 Cosmos DB 容量模式:
max_throughput = 1000)。本实验使用最大 1000 RU/秒的自动缩放——即使零流量,最低账单也约为每月 24 美元(自动缩放最低按最大 RU/秒的 10% 计费)。将 autoscale_settings 切换到 serverless 功能以实现闲置时 0 美元。如果您不切换,请立即销毁。
标准的 Azure 开篇。Cosmos DB 账户名称必须是全球唯一的(以 <name>.documents.azure.com 发布到 DNS)—— random_id 可避免冲突。
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
}DP-420 考试的“实现、管理和监控 Cosmos DB 解决方案”部分直接测试备份模式:定期备份(默认;每 4 小时备份 2 次,保留 8 天)与连续备份(可在 30 天或 7 天内恢复到任意时间点)。连续备份是生产级别的解决方案;我们在实验中使用 7 天层级以降低成本。
local_authentication_disabled = true 强制使用 Entra ID 身份验证——这是 DP-420 生产环境的答案。Cosmos 的 RBAC 数据平面模型是考试中最常考的主题之一。
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
}容器是 DP-420 考试花费最多时间的地方。我们选择 /userId 作为示例的分区键——高基数(良好的分布),典型的访问模式是“获取我的用户记录”,因此我们在分区内读取(最快、最便宜的 RU/秒)。
索引策略是 DP-420 考试的下一个重要成本杠杆。默认情况下,Cosmos 会索引每个属性——查询速度快,但写入成本高。我们排除了 /largeBlob/?(一个保存我们从不查询的、大量非结构化数据的路径)和 /_etag/?(自动管理,没有索引价值)。自定义索引策略被明确测试为写密集型工作负载的成本优化解决方案。
自动缩放最大 1000 RU/秒——闲置时最低按最大值的 10% 计费(100 RU/秒约合每月 24 美元)。对于真实的生产数据库,您需要根据每个请求的预期 RU/秒进行建模,乘以持续的 QPS,再乘以 1.5 倍的安全系数,然后将最大值设置为该数字。
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
}通过第 2 步中的 local_authentication_disabled = true,读取或写入容器的唯一方式是通过 Entra ID 身份验证 + Cosmos 的数据平面 RBAC。内置的 Cosmos DB 内置数据参与者 角色(GUID 00000000-0000-0000-0000-000000000002)授予账户范围内的完全读写权限。
DP-420 考试会测试“控制平面与数据平面”的角色区别:控制平面 RBAC (Azure RBAC) 管理账户本身(创建容器、更改吞吐量);数据平面 RBAC(Cosmos 特有)管理容器内的文档。它们是独立的角色分配;一个不意味着另一个。
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 会销毁所有资源。Cosmos DB 账户有7 天的软删除窗口——在此期间,账户名称仍将保留。自动缩放吞吐量在销毁后会立即停止计费。
DP-420 涵盖了本实验无法容纳的许多 Cosmos DB 功能——用于分析查询的 Synapse Link、变更源处理器、MongoDB / Cassandra / Gremlin / Table 版 Cosmos DB(我们仅使用核心 SQL API)、多区域写入(多主)、私有端点、客户管理的密钥、分层分区键(撰写时为预览版),以及深入的 Cosmos DB 无服务器容量模式。
我们坚持使用分区键 + 索引 + 自动缩放 + RBAC + 连续备份这些基本功能,因为它们是 DP-420 考试中测试最多的属性。多区域写入通过额外的 geo_location 块在此基础上分层;私有端点通过 azurerm_private_endpoint 分层;Synapse Link 是一个单一属性切换。先打好基础;再根据模式进行添加。
有关按服务分类的覆盖范围,请参阅此认证页面的浏览和 Editorial 部分。