最終確認: 2026年5月
DP-420 試験の対象となる AWS サービスを、プレーンな Terraform を使用して構築します。1 ブロックずつ、それぞれ試験ドメインに関連付けられています。同じコードが OpenTofu でも動作します。
このラボを完了すると、プレーンなTerraformを使用して、DP-420試験のパターン(Core (SQL) API、最大スループットを備えた自動スケールスループット、熟考されたパーティションキーを持つデータベースとコンテナー、書き込み頻度の高いパスを除外するカスタムインデックス作成ポリシー、ポイントインタイムリストアの有効化、および継続的バックアップ)に構成されたCosmos DBアカウントがプロビジョニングされます。これはDP-420の参照ベースラインです。
これらのスニペットを単一のmain.tfファイルに配置し、terraform initを実行した後、terraform applyを段階的に実行してください。
>= 1.5 または OpenTofu >= 1.6。az login)。DP-420のコストに関する質問は、Cosmos DBの容量モードについてです。
max_throughput = 1000を使用します)。このラボでは、最大1000 RU/sの自動スケールを使用します。これはトラフィックがゼロでも月額約24ドルが最低料金として発生します(自動スケールは最大RU/sの10%が最低課金されます)。アイドル時のコストを0にするには、autoscale_settingsをserverless機能に切り替えてください。切り替えない場合は、速やかに破棄してください。
標準的な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ソリューションの実装、管理、監視」では、バックアップモードが直接テストされます:定期(デフォルト; 4時間ごとに2回バックアップされ、8日間保持)対継続的(30日または7日以内であれば任意の時点に復元可能)。継続的バックアップが本番環境レベルの回答です。このラボではコストを低く抑えるため、7日間保持のティアを使用します。
local_authentication_disabled = trueはEntra ID認証を強制します。これはDP-420の本番環境での回答です。CosmosのRBACデータプレーンモデルは、試験で最も頻繁に問われるトピックの1つです。
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/s)。
インデックス作成ポリシーは、DP-420における次の大きなコスト調整の要素です。デフォルトでは、Cosmosはすべてのプロパティにインデックスを付けます。これはクエリは高速ですが、書き込みコストが高くなります。ここでは/largeBlob/?(クエリすることのない重い非構造化データを保持するパス)と/_etag/?(自動管理されており、インデックスを付ける価値がない)を除外します。カスタムインデックス作成ポリシーは、書き込み頻度の高いワークロードにおけるコスト最適化の解決策として明確にテストされます。
自動スケールの最大1000 RU/s — アイドル時でも最大値の10%が最低課金されます(100 RU/s = 月額約24ドル)。実際の本番データベースでは、リクエストあたりの予想RU/sをモデル化し、持続的な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 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、変更フィードプロセッサ、MongoDB / Cassandra / Gremlin / Table用Cosmos DB(ここではCore SQLのみを使用)、複数リージョン書き込み(マルチマスター)、プライベートエンドポイント、顧客管理キー、階層型パーティションキー(執筆時点ではプレビュー)、およびCosmos DBサーバーレス容量モードの詳細です。
私たちは、DP-420で最もテストされる属性であるパーティションキー + インデックス作成 + 自動スケール + RBAC + 継続的バックアップのプリミティブに焦点を当てます。複数リージョン書き込みは、追加のgeo_locationブロックを介してこのベースの上にレイヤー化され、プライベートエンドポイントはazurerm_private_endpointを介してレイヤー化され、Synapse Linkは単一の属性トグルです。基本を正しく理解し、パターンごとに構築します。
サービスごとのカバー範囲については、この認定ページの閲覧およびEditorialセクションを参照してください。