Последняя проверка: май 2026 г.
Разверните сервисы AWS для экзамена DP-420 с помощью чистого Terraform: пошаговое руководство с привязкой каждого блока к разделам экзамена. Код также совместим с OpenTofu.
К концу этой лабораторной работы вы настроите с помощью простого Terraform учетную запись Cosmos DB, сконфигурированную для шаблонов экзамена DP-420 — API Core (SQL), масштабируемая пропускная способность с максимальным ограничением, база данных + контейнер с продуманным ключом раздела, пользовательская политика индексирования, исключающая пути с интенсивной записью, включенное восстановление на определенный момент времени и непрерывное резервное копирование. Это эталонная база 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 долларов США в месяц даже при нулевом трафике (автомасштабирование тарифицируется минимум на 10% от максимального значения RU/с). Переключите autoscale_settings на serverless для $0 простоя. Удалите незамедлительно, если вы не переключитесь.
Стандартное начало Azure. Имена учетных записей Cosmos DB должны быть глобально уникальными (публикуются в DNS как <name>.documents.azure.com) — 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) напрямую проверяет режимы резервного копирования: Периодическое (по умолчанию; 2 резервные копии каждые 4 часа, хранятся 8 дней) против Непрерывного (восстановление на определенный момент времени с точностью до секунды в течение 30 или 7 дней). Непрерывное резервное копирование — это производственное решение; для лабораторной работы мы используем 7-дневный уровень, чтобы снизить затраты.
local_authentication_disabled = true принуждает использовать аутентификацию Entra ID — это производственное решение для DP-420. Модель RBAC уровня данных Cosmos является одной из наиболее часто проверяемых тем экзамена.
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,5x и установили это число как максимальное.
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
}При использовании local_authentication_disabled = true из Шага 2, единственный способ читать или записывать в контейнер — это через аутентификацию Entra ID + RBAC уровня данных Cosmos. Встроенная роль Участник данных Cosmos DB (Cosmos DB Built-in Data Contributor) (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 для аналитических запросов, процессор канала изменений, Cosmos DB для MongoDB / Cassandra / Gremlin / Table (мы используем только Core SQL), многорегиональные записи (multi-master), частные конечные точки, управляемые клиентом ключи, иерархические ключи раздела (предварительная версия на момент написания), а также режим бессерверной емкости Cosmos DB в глубину.
Мы придерживаемся примитивов ключа раздела + индексирования + автомасштабирования + RBAC + непрерывного резервного копирования, потому что они являются наиболее часто проверяемыми атрибутами DP-420. Многорегиональные записи наслаиваются на эту основу через дополнительные блоки geo_location; частные конечные точки наслаиваются через azurerm_private_endpoint; Synapse Link — это переключатель одного атрибута. Освойте основу; далее добавляйте по шаблону.
Подробное описание каждой службы см. в разделах Просмотр и Editorial на этой странице сертификации.