最終確認: 2026年5月
AZ-305 試験の対象となる AWS サービスを、プレーンな Terraform を使用して構築します。1 ブロックずつ、それぞれ試験ドメインに関連付けられています。同じコードが OpenTofu でも動作します。
このラボの終わりまでに、プレーンなTerraformを使って、AZ-305リファレンスアーキテクチャのコア要素(ハブ・スポークVNetトポロジ(ハブ1つ、スポーク1つ、ピアリング済み)、グローバルHTTPSエントリ用のAzure Front Door、RBAC認可によるシークレットと証明書管理のためのKey Vault、およびArchitect-Expertの設計が前提とする診断配管)をプロビジョニングします。各ブロックはAZ-305の設計ドメインと関連しています。
これらのスニペットを単一の main.tf ファイルに記述し、terraform init を実行した後、terraform apply をステップバイステップで実行してください。
>= 1.5 または OpenTofu >= 1.6。az login)。スタック全体のアイドル時コストは月額約36ドルです。Front Doorは費用がかかる罠です。積極的にテストしていない場合は、速やかに削除してください。
標準的なAzureの導入部分です。AZ-305では、「2リージョン」に関する質問に対して eastus / westus のペアを使用することが期待されます。これらは、遅延テストやペアリージョンでのフェールオーバーシナリオにおける、AZ-305の標準的なリージョンペアです。
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-az-305"
ManagedBy = "terraform"
}
}
resource "azurerm_resource_group" "main" {
name = "certlabpro-az-305-rg"
location = "eastus"
tags = local.tags
}ハブ・スポークはAZ-305の参照ネットワーク設計です。中央の ハブ VNetが共有サービス(ファイアウォール、VPNゲートウェイ、DNS)をホストし、スポーク VNetがワークロードをホストします。スポークはハブと双方向にピアリングし、スポーク間のトラフィックはハブを経由します。このトポロジは、あらゆるマルチワークロードAzureランディングゾーンの基盤であるため、試験で繰り返し問われます。
ここでは、最もシンプルなハブ・スポーク(ハブVNet 1つ(10.0.0.0/16)、スポークVNet 1つ(10.1.0.0/16)、双方向ピアリング)を構築します。実際のハブ・スポーク設計では、ハブにAzure Firewallを追加し、next_hop_in_ip_address ルートテーブルでスポークトラフィックを強制的に経由させますが、ここではコストの都合上(Azure Firewallはアイドル時で1時間あたり約1ドル)割愛します。この概念は説明します。
resource "azurerm_virtual_network" "hub" {
name = "certlabpro-az-305-hub"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
address_space = ["10.0.0.0/16"]
tags = local.tags
}
resource "azurerm_subnet" "hub_shared" {
name = "shared"
resource_group_name = azurerm_resource_group.main.name
virtual_network_name = azurerm_virtual_network.hub.name
address_prefixes = ["10.0.1.0/24"]
}
resource "azurerm_virtual_network" "spoke" {
name = "certlabpro-az-305-spoke"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
address_space = ["10.1.0.0/16"]
tags = local.tags
}
resource "azurerm_subnet" "spoke_app" {
name = "app"
resource_group_name = azurerm_resource_group.main.name
virtual_network_name = azurerm_virtual_network.spoke.name
address_prefixes = ["10.1.1.0/24"]
}
resource "azurerm_virtual_network_peering" "hub_to_spoke" {
name = "hub-to-spoke"
resource_group_name = azurerm_resource_group.main.name
virtual_network_name = azurerm_virtual_network.hub.name
remote_virtual_network_id = azurerm_virtual_network.spoke.id
allow_forwarded_traffic = true
}
resource "azurerm_virtual_network_peering" "spoke_to_hub" {
name = "spoke-to-hub"
resource_group_name = azurerm_resource_group.main.name
virtual_network_name = azurerm_virtual_network.spoke.name
remote_virtual_network_id = azurerm_virtual_network.hub.id
allow_forwarded_traffic = true
}Key VaultはAZ-305のシークレットおよび証明書に関する基本要素です。試験で問われる大きなアーキテクチャ上の決定には、RBACとアクセスポリシーの比較 (RBACが現代のデフォルトであり、アクセスポリシーはレガシーです) と、論理削除 + 消去保護 (論理削除はデフォルトで有効になっており、消去保護は論理削除期間を上書きできないようにするものです。これは一部のコンプライアンス要件に必要です) があります。
ここではRBAC認証を有効にし、現在のTerraformプリンシパルをKey Vault管理者として割り当てることで、後続のシークレット/証明書リソースが機能するようにします。「アプリケーションがデータベースパスワードを読み取れない」というAZ-305の質問の90%は、「マネージドIDにKey Vaultシークレットユーザーのロールが割り当てられていなかったため」という結果に終わります。
resource "azurerm_key_vault" "main" {
name = "kv-az305-${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 # 7 minimum; 90 for purge protection in production
purge_protection_enabled = false # set true for production / compliance
public_network_access_enabled = true
tags = local.tags
}
resource "azurerm_role_assignment" "kv_admin_self" {
scope = azurerm_key_vault.main.id
role_definition_name = "Key Vault Administrator"
principal_id = data.azurerm_client_config.current.object_id
}Front DoorはAZ-305における グローバルロードバランサー + WAF + CDN の解答です。試験では、Application Gateway (リージョンL7)、Traffic Manager (DNSベース、トラフィック通過なし)、Load Balancer (リージョンL4) の3つの代替手段と比較して問われます。Front Doorは、「グローバルに分散したユーザー + HTTPS + WAF + キャッシュ」のあらゆるシナリオにおいて適切な解答です。
ここでは、Front Doorプロファイル + エンドポイント + スタブオリジングループをプロビジョニングします。本番環境では、WebアプリまたはAKSイングレスをオリジンとして接続しますが、このラボではAZ-305の質問で問われるトポロジの形が重要です。Standardティアは、試験で期待されるセキュリティ機能とルーティング機能(WAF、カスタムルール、セッションアフィニティ)をサポートし、Premiumティアは完全にプライベートなバックエンドアクセス用のプライベートリンクリソースを追加します。
resource "azurerm_cdn_frontdoor_profile" "main" {
name = "certlabpro-az-305-fd"
resource_group_name = azurerm_resource_group.main.name
sku_name = "Standard_AzureFrontDoor"
tags = local.tags
}
resource "azurerm_cdn_frontdoor_endpoint" "main" {
name = "certlabpro-az-305-${random_id.suffix.hex}"
cdn_frontdoor_profile_id = azurerm_cdn_frontdoor_profile.main.id
tags = local.tags
}
resource "azurerm_cdn_frontdoor_origin_group" "main" {
name = "app-origins"
cdn_frontdoor_profile_id = azurerm_cdn_frontdoor_profile.main.id
session_affinity_enabled = false
load_balancing {
sample_size = 4
successful_samples_required = 3
}
health_probe {
path = "/"
request_type = "HEAD"
protocol = "Https"
interval_in_seconds = 30
}
}AZ-305の「データストレージと統合の設計」ドメインと「事業継続性の設計」ドメインは、いずれもアーキテクチャ要素に関する可観測性に依存します。ここでは、Log Analyticsワークスペースを作成し、Front DoorのアクセスログとKey Vaultの監査ログをそこに接続します。
診断のための配管が整うことで、AZ-305の参照アーキテクチャが形作られます。すなわち、グローバルイングレス(Front Door)→ハブ・スポークネットワーク→ワークロードスポーク→シークレットレイヤー(Key Vault)→可観測性ファブリック(Log Analytics)です。追加されるすべてのアーキテクチャ要素(Front Doorの背後にあるApplication Gateway、スポーク内のCosmos DB、ハブ内のLogic Appsなど)は、この基盤に接続されます。
resource "azurerm_log_analytics_workspace" "main" {
name = "certlabpro-az-305-logs"
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
sku = "PerGB2018"
retention_in_days = 30
tags = local.tags
}
resource "azurerm_monitor_diagnostic_setting" "key_vault" {
name = "diag"
target_resource_id = azurerm_key_vault.main.id
log_analytics_workspace_id = azurerm_log_analytics_workspace.main.id
enabled_log {
category = "AuditEvent"
}
metric {
category = "AllMetrics"
enabled = true
}
}
resource "azurerm_monitor_diagnostic_setting" "front_door" {
name = "diag"
target_resource_id = azurerm_cdn_frontdoor_profile.main.id
log_analytics_workspace_id = azurerm_log_analytics_workspace.main.id
enabled_log {
category = "FrontDoorAccessLog"
}
enabled_log {
category = "FrontDoorHealthProbeLog"
}
}terraform destroy ですべてが削除されます。Front Door プロファイルは、24時間365日課金される項目です(月額約35ドル)。確認が終わったら速やかに削除してください。Key Vaultは7日間の論理削除が有効になっています(最大90日まで設定可能)。プロバイダーで purge_soft_delete_on_destroy = true を設定しているため、destroy コマンドは名前空間を予約したままにするのではなく、実際にVaultを完全に削除します。
AZ-305は、Application Gateway、Azure Firewall、VPN Gateway + ExpressRoute、Private Link / Private Endpoints、Azure Active Directory B2B / B2C、Conditional Access、Privileged Identity Management、アーキテクチャ規模のAKS、Service Fabric、Azure API Management、マルチリージョンペアデプロイ、geoレプリケートされたCosmos / SQL / Storage、BCDR設計(Site Recovery)、大規模なコスト管理、ランディングゾーン設計、Azure Policyイニシアティブなど、広範なアーキテクチャ領域をカバーしています。
このラボでは、AZ-305のあらゆるマルチコンポーネント設計が前提とする基盤となる、4つの基本的なプリミティブに焦点を当てます。Application Gatewayはステップ2のハブスポークに配置されます。AKSはスポークVNetにデプロイされます。Cosmos DBはスポークにプライベートエンドポイントを公開します。Defender for CloudはLog Analyticsワークスペースを読み取ります。アーキテクチャは構成であり、このラボは基本的な形状を提供します。
プロビジョニングされていない領域については、この認定ページにある閲覧、プレイブック、Editorialの各セクションに概念的な資料があります。