最終確認: 2026年5月
DP-100 試験の対象となる AWS サービスを、プレーンな Terraform を使用して構築します。1 ブロックずつ、それぞれ試験ドメインに関連付けられています。同じコードが OpenTofu でも動作します。
このラボを終える頃には、Terraformを使用して、Azure Machine Learningワークスペースのコントロールプレーン(ワークスペース自体、3つの必須依存関係(ストレージアカウント、Key Vault、Application Insights)、およびアイドル時にゼロにスケールされるAzure MLコンピュートクラスター)をプロビジョニングしているでしょう。これにより、ラボの費用がかさむのを防ぎます。これはDP-100のリファレンスワークスペース設定であり、トレーニングジョブとモデルデプロイメントがこれに接続されます。
これらのスニペットを単一の main.tf にドロップし、terraform init を実行した後、terraform apply をステップバイステップで実行してください。
>= 1.5 または OpenTofu >= 1.6。az login)。コントロールプレーンはアイドル時にほぼ0ドルです:
DP-100のコストトラップは、コンピュートクラスターの min_node_count を 0より大きい値 にしておくことです — アイドル状態のノードが1つあるだけでも月額200ドル以上かかります。このラボでは min_node_count = 0 および scale_down_nodes_after_idle_duration = PT15M (アイドル後15分でスケールダウン) を設定しています。実行前に確認し、完了したら破棄してください。
標準的なAzureの冒頭設定。Azure MLワークスペースはリージョン限定です — ラボを超えてGPU SKUの利用を考えている場合は、幅広いGPU SKUが利用可能なリージョンを選択してください(eastus、westus、westeurope が安全な選択肢です)。
terraform {
required_version = ">= 1.5"
required_providers {
azurerm = { source = "hashicorp/azurerm", version = "~> 4.0" }
random = { source = "hashicorp/random", version = "~> 3.6" }
}
}
provider "azurerm" {
features {
key_vault {
purge_soft_delete_on_destroy = true
}
}
}
resource "random_id" "suffix" {
byte_length = 3
}
data "azurerm_client_config" "current" {}
locals {
tags = {
Project = "certlabpro-dp-100"
ManagedBy = "terraform"
}
}
resource "azurerm_resource_group" "main" {
name = "certlabpro-dp-100-rg"
location = "eastus"
tags = local.tags
}Azure MLワークスペースには、アタッチするための3つの既存リソースが必要です:ストレージアカウント(データセット、モデル、ログ用)、Key Vault(資格情報用)、およびApplication Insightsインスタンス(実行テレメトリー用)。DP-100ではこの3点セットが繰り返しテストされます — 「なぜワークスペースを作成できないのか?」という問題は、ほとんどの場合、これらのいずれかが不足しているためです。
ここで設定するストレージアカウントは標準的な安全なデフォルト設定を持ちます。Key VaultはRBAC承認(最新のデフォルト)を使用します。
resource "azurerm_storage_account" "ml" {
name = "dp100ml${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"
https_traffic_only_enabled = true
min_tls_version = "TLS1_2"
allow_nested_items_to_be_public = false
tags = local.tags
}
resource "azurerm_key_vault" "ml" {
name = "kv-dp100-${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
tenant_id = data.azurerm_client_config.current.tenant_id
sku_name = "standard"
enable_rbac_authorization = true
soft_delete_retention_days = 7
tags = local.tags
}
resource "azurerm_application_insights" "ml" {
name = "appi-dp100-${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
application_type = "web"
tags = local.tags
}ワークスペースは3つの依存関係を結合し、システム割り当てマネージドIDを取得します。このIDは、ダウンストリームのコンピューティングターゲット、データセット、エンドポイントが依存関係から読み取るために使用します。DP-100の「ML用のAzureリソースの管理」ドメインでは、この正確な形態(ワークスペース + ID + ロール割り当て)がテストされます。
このラボをシンプルに保つため、public_network_access_enabled = true を設定しています。運用環境のワークスペースでは通常プライベートエンドポイントを使用します(DP-100の「機械学習ソリューションの設計と準備」ドメインではプライベートリンクのバリアントがテストされます)。
resource "azurerm_machine_learning_workspace" "main" {
name = "mlw-dp100-${random_id.suffix.hex}"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
application_insights_id = azurerm_application_insights.ml.id
key_vault_id = azurerm_key_vault.ml.id
storage_account_id = azurerm_storage_account.ml.id
public_network_access_enabled = true
identity {
type = "SystemAssigned"
}
tags = local.tags
}トレーニングジョブにはコンピューティングが必要です。Azure MLコンピュートクラスターは、ジョブキューの深さに応じてスケーリングされるマネージドVMプールです。min_node_count = 0 は、ラボ/開発ワークスペースにおけるDP-100のコスト最適化のための必須設定です — ジョブがキューにない場合、クラスターは0ノードにスケールされ、請求は0ドルになります(メタデータのみ)。
Standard_DS3_v2 (4 vCPU、14 GB RAM、0.30ドル/時) は一般的なラボのデフォルトであり、sklearnや小規模なPyTorchトレーニングジョブを実行するのに十分な大きさでありながら、安価です。運用環境のトレーニングクラスターではGPU SKU (Standard_NC6s_v3 ファミリー) を使用します。
scale_down_nodes_after_idle_duration = "PT15M" (ISO 8601形式で15分間) は、DP-100の繰り返し問われるコストに関する質問です。これを長すぎると高価なノードが稼働し続け、短すぎるとスラッシングを引き起こします。15分はAzureのドキュメントに記載されているデフォルト値です。
resource "azurerm_machine_learning_compute_cluster" "main" {
name = "cpu-cluster"
location = azurerm_resource_group.main.location
vm_priority = "Dedicated"
vm_size = "Standard_DS3_v2"
machine_learning_workspace_id = azurerm_machine_learning_workspace.main.id
scale_settings {
min_node_count = 0
max_node_count = 2
scale_down_nodes_after_idle_duration = "PT15M"
}
identity {
type = "SystemAssigned"
}
tags = local.tags
}terraform destroy はすべてを破棄します。重要な注意事項:
purge_soft_delete_on_destroy = true を設定すると、Key Vaultの破棄が実際に完全削除されるようになります。ワークスペースの論理削除はポータルで設定可能ですが、terraform destroy はそれに関わらず機能します。DP-100は、このラボではカバーしきれないAzure上のより多くのMLサーフェスを扱います — コンピュートインスタンス(シングルユーザーIDE VM、アイドル時のコストが非常に高い)、オンラインエンドポイント(マネージドリアルタイム推論)、バッチエンドポイント(マネージドバッチ推論)、AutoMLジョブ、Designer(ビジュアルパイプラインエディター)、MLflowトラッキング統合、ParallelRunStep、モデルレジストリプロモーションワークフロー、およびデータ資産/データストアカタログ全体。
私たちはワークスペースコントロールプレーンに限定します。なぜなら、すべてのDP-100パターンがこれにアタッチされる基盤だからです。エンドポイントはワークスペースにアタッチされます。ジョブはコンピュートクラスターで実行されます。モデルはワークスペースのMLflowトラッキングに登録されます。データセットはストレージアカウントに着地します。
上記のサーフェスについては、この認定ページにある閲覧およびEditorialセクションを参照してください。DP-100の「MLモデルのトレーニング」および「MLソリューションのデプロイと運用」ドメインは、このワークスペースに対してジョブを実行することで最もよく学習できます — このラボは基盤を提供し、Python SDKが実際のトレーニングとデプロイを行います。