最終確認: 2026年5月
DP-900 試験の対象となる AWS サービスを、プレーンな Terraform を使用して構築します。1 ブロックずつ、それぞれ試験ドメインに関連付けられています。同じコードが OpenTofu でも動作します。
このラボの終わりまでに、DP-900でテストされる3つのデータプラットフォーム形状 — ライフサイクルポリシーを持つBLOB/分析データ用Azureストレージアカウント、Basicティアサーバー上のリレーショナルAzure SQL Database、非リレーショナルJSON用サーバーレスCosmos DBアカウント — を、プレーンなTerraformでプロビジョニングします。1つのスタック、3つの基盤、それぞれがDP-900のドメインに紐付けられています。
すべてのリソースはプレーンなTerraformです。これらのスニペットを1つの main.tf にドロップし、terraform init を実行した後、terraform apply をステップバイステップで実行してください。
>= 1.5 または OpenTofu >= 1.6。az login)。さまざまな費用 — 安価なものが2つ、実際の請求が発生するものが1つです:
スタック全体で実行中は月額約$5~8です。完了したら速やかに破棄してください — SQL DBは、使用しているかどうかにかかわらず24時間365日課金される唯一の項目です。
標準的なAzureの開始部分を1つのブロックにまとめます。azurerm ~> 4.0 を固定し、random および random_password プロバイダーを登録し(両方使用します — random_id は一意のリソース命名に、random_password はSQL管理者パスワードに)、リソースグループを作成します。
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 = 2
}
locals {
tags = {
Project = "certlabpro-dp-900"
ManagedBy = "terraform"
}
}
resource "azurerm_resource_group" "main" {
name = "certlabpro-dp-900-rg"
location = "eastus"
tags = local.tags
}Azure Storageは、DP-900のあらゆる問題が前提とする分析データ基盤です(ホット/クール/アーカイブ階層化、コールドデータを自動的に移行するライフサイクルポリシー)。階層型ネームスペース (is_hns_enabled = true) を有効にすることで、アカウントをAzure Data Lake Storage Gen2に変換します — これはAzure Synapse、Databricks、Fabricが分析ワークロードで期待するバージョンです。
ライフサイクルポリシーは、DP-900で最もよくテストされるコスト最適化メカニズムです。アクティブデータにはホットティア、30日経過後にクールティア、90日経過後にアーカイブティアです。3つのティア、3つの保持期間 — 試験ではシナリオでこれらの日数が挙げられます。
resource "azurerm_storage_account" "analytics" {
name = "dp900data${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
account_tier = "Standard"
account_replication_type = "LRS"
account_kind = "StorageV2"
is_hns_enabled = true # Data Lake Storage Gen2
https_traffic_only_enabled = true
min_tls_version = "TLS1_2"
allow_nested_items_to_be_public = false
tags = local.tags
}
resource "azurerm_storage_management_policy" "analytics" {
storage_account_id = azurerm_storage_account.analytics.id
rule {
name = "tier-cold-data"
enabled = true
filters {
blob_types = ["blockBlob"]
prefix_match = ["raw/"]
}
actions {
base_blob {
tier_to_cool_after_days_since_modification_greater_than = 30
tier_to_archive_after_days_since_modification_greater_than = 90
}
}
}
}Azure上のリレーショナルデータは、Azure SQL Database(PaaS、フルマネージド)を意味します。DP-900では、SQL Database(単一データベース、サーバーレスまたはDTUベース、PaaS)とSQL Managed Instance(SQL Serverとのほぼ100%互換性、大規模インスタンスPaaS)とSQL Server on VM(IaaS、完全な制御)との区別がテストされます。
私たちは、SQL Serverの論理コンテナ(接続文字列エンドポイント)と、その下にBasicティア(最も安価な有料SKU)のデータベースを1つプロビジョニングします。転送中の常時暗号化(TLS 1.2)が強制されます。ファイアウォールルールはAzureサービスが接続することを許可します(典型的なDP-900の「App ServiceがSQLとどのように通信するのか?」という質問に対する答えがこのルールです)。
resource "random_password" "sql_admin" {
length = 24
special = true
min_upper = 2
min_lower = 2
min_numeric = 2
}
resource "azurerm_mssql_server" "main" {
name = "certlabpro-dp-900-${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
version = "12.0"
administrator_login = "sqladmin"
administrator_login_password = random_password.sql_admin.result
minimum_tls_version = "1.2"
public_network_access_enabled = true
tags = local.tags
}
resource "azurerm_mssql_database" "main" {
name = "certlabpro-dp-900-db"
server_id = azurerm_mssql_server.main.id
sku_name = "Basic"
max_size_gb = 2
zone_redundant = false
tags = local.tags
}
resource "azurerm_mssql_firewall_rule" "allow_azure_services" {
name = "AllowAzureServices"
server_id = azurerm_mssql_server.main.id
start_ip_address = "0.0.0.0"
end_ip_address = "0.0.0.0" # 0.0.0.0/0.0.0.0 = "allow Azure services" sentinel
}Azure上の非リレーショナルデータは、グローバル分散型マルチAPIデータベースであるAzure Cosmos DBを意味します。DP-900では、特にAPIの区別 — NoSQL (Core / SQL API、最も一般的)、MongoDB、Cassandra、Gremlin、Table — がテストされます。ここではCore SQL APIとサーバーレス容量モード(リクエストごとの従量課金、アイドル時の課金なし — サーバーレスとプロビジョニングのDP-900コストアンチパターンに関する質問)を使用します。
consistency_level = "Session" はCosmos DBのデフォルトであり、DP-900で最もテストされる整合性レベルです。優れたレイテンシでセッションごとの線形化可能性を提供します。その他の4つ — Strong、Bounded staleness、Eventual、Consistent prefix — は概念的な試験トピックです。
3つのデータ基盤が整った(ステップ2のBLOB、ステップ3のSQL、ステップ4のCosmos)ことで、DP-900の「コアデータコンセプト」ドメインは具体的な形を帯びます。「どのデータ形状にどのAzureサービスを使用するか」という問いは、これら3つのリソースによって答えられます。
resource "azurerm_cosmosdb_account" "main" {
name = "certlabpro-dp-900-${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
capabilities {
name = "EnableServerless"
}
consistency_policy {
consistency_level = "Session"
}
geo_location {
location = azurerm_resource_group.main.location
failover_priority = 0
}
tags = local.tags
}標準的な terraform destroy コマンドですべてのラボリソースを破棄します。2点注意してください:
random_password を介して生成され、Terraformステートに保存されます。ステートをgitにコミットすると、パスワードもコミットされます。重要度の高いセットアップでは、リモートステートバックエンド(バージョン管理とソフト削除付きのAzure Storage)を使用してください。DP-900は、このラボではカバーできない多くのデータサービスを扱います — Azure Synapse Analytics (DP-600/DP-700でカバー)、Azure Databricks、Azure Data Factory、Microsoft Fabric、Azure Stream Analytics、Event Hubs、Azure SQL Managed Instance、Azure Database for PostgreSQL / MySQL / MariaDB、Power BI、そしてアイドル中に高額な課金が発生するAzure分析サービス(Synapse dedicated SQL pools, dedicated Spark pools)などです。
DP-900は基本的に「どのデータ形状にどのサービスか」を問う試験であるため、私たちは3つの主要なデータ形状(BLOB/分析、リレーショナル、非リレーショナル)に焦点を当てます。このラボでプロビジョニングする3つの基盤を理解すれば、他のDP-900の質問はすべて、それらの上に構築されるレイヤーに関する質問になります。
サービスごとのカバー範囲については、この認定ページにある閲覧、プレイブック、およびEditorialセクションを参照してください。