Azure ランディング ゾーン Terraform モジュール

Azure には、Azure ランディング ゾーンを構築するためのネイティブ サービスが用意されています。 他のツールも、この作業に役立ちます。 顧客やパートナーがランディング ゾーンのデプロイによく使用するツールの 1 つは、HashiCorp の Terraform です。

アプリケーションのランディング ゾーンへのリソースのデプロイは、モジュールの範囲外です。 デプロイ方法とツールに関する決定は、アプリケーションを担当するチーム向けです。

Azure ランディング ゾーン Terraform モジュールでは、Terraformを利用することで、Azure ランディング ゾーンの大規模な管理に必要なプラットフォームリソースを迅速に実装できます。 このモジュールは、管理グループ階層、ポリシー、接続および管理サブスクリプション内のリソースのデプロイを簡略化するために設計されています。

前提条件

Terraformを初めて使う方で、インストールや使い方についての情報が欲しい方は、をご覧ください。HashiCorp LearnのTerraformのインストールチュートリアルをご覧ください。

プロバイダーをセットアップして Azure で認証する方法に関する情報について、AzureRM プロバイダー ガイドを調べることもお勧めします。 複数のサブスクリプションにデプロイするためにプロバイダーを設定する方法の詳細については、プロバイダー構成 wiki ページを参照してください。

標準モジュールを使用することの重要性

コンポーネントの再利用は、コードとしてのインフラストラクチャの基本原則です。 モジュールは、環境内および環境間でのリソースのデプロイにおける標準と一貫性の定義に役立ちます。

Azure ランディング ゾーン Terraform モジュールは、公式の Terraform レジストリに公開され、HashiCorp によって検証されています。

Terraform Registry からモジュールをデプロイすると、次の機能が提供されます。

  • 環境内の Azure ランディング ゾーンの高速配信。
  • 厳密なバージョン管理と共に、モジュールの最新バージョンへのテスト済みのアップグレード パス。

モジュールを使用する利点

Azure ランディング ゾーン Terraform モジュールを使用する利点は次のとおりです。

  • 管理グループを使用するサブスクリプション組織の管理された拡張可能なア リソース階層。
  • Azure ID およびアクセス管理 (IAM) コントロールを使用した、スケーラブルなセキュリティガバナンスとコンプライアンス。カスタム定義の豊富なライブラリを割り当てることができます。
  • 管理グループの継承による、サブスクリプション間でのポリシーの適用。
  • 管理および接続のランディング ゾーンの管理対象リソース。 これらのリソースには、次の情報が用意されています。
    • モジュールによって管理されるリソースと、それに対応するポリシー割り当ての緊密な統合により、確実なポリシー準拠。
    • リソース間の統合により、管理オーバーヘッドが軽減され、ユーザーの技能が向上します (Azure プライベート DNS の仮想ネットワーク リンクの自動作成など)。

ヒント

テンプレート ライブラリは、Azure/Enterprise-Scale GitHub リポジトリからプログラムによって更新されます。 最新の原型の構成、ポリシー、およびロールを使用して最新の状態を維持するには、最新バージョンのモジュールを使用していることを確認します。

リソースのデプロイ

Azure ランディング ゾーンの次の重要な設計領域に合わせてリソースのセットをデプロイするようにモジュールを構成できます。 組織の要件を満たすようにリソースをカスタマイズします。

リソースカテゴリ 重要な設計領域
コア リソース リソース組織
セキュリティ
ガバナンス
管理リソース 管理と監視
接続のリソース ネットワーク トポロジと接続
ID リソース ID とアクセス管理

これらの機能を 1 つの Terraform モジュールにパッケージ化することにより、大規模な運用時に、Azure プラットフォーム全体で一貫性のある構築と適用が容易になります。

これらのリソースは、Azure ランディング ゾーンの概念アーキテクチャに合わせて調整されます。

Azure ランディング ゾーンの概念アーキテクチャの図。

モジュール ブロック上のプロバイダー構成を使用して、これらのリソースを機能ごとに複数のサブスクリプションにまたがってデプロイできます。

次のセクションでは、リソースの種類と設定オプションの概要を説明します。

コア リソース

このモジュールのコア能力は、の基礎を展開します。クラウド採用フレームワーク上のAzureランディングゾーンのための中心的なリソース組織

コア リソースの階層に焦点をあてた Azure ランディング ゾーンの概念アーキテクチャの図。

コア リソースのデプロイ ("既定で有効") を有効にすると、モジュールは次のリソースの種類をデプロイおよび管理します。

リソース Azure リソースタイプ Terraform リソースタイプ
管理グループ Microsoft.Management/managementGroups azurerm_management_group
管理グループのサブスクリプション Microsoft.Management/managementGroups/subscriptions azurerm_management_group
ポリシーの割り当て Microsoft.Authorization/policyAssignments azurerm_management_group_policy_assignment
ポリシーの定義 Microsoft.Authorization/policyDefinitions azurerm_policy_definition
ポリシーセットの定義 Microsoft.Authorization/policySetDefinitions azurerm_policy_set_definition
ロールの割り当て Microsoft.Authorization/roleAssignments azurerm_role_assignment
ロールの定義 Microsoft.Authorization/roleDefinitions azurerm_role_definition

モジュールに作成されるリソースの正確な数は、モジュールの構成によって異なります。 既定の構成では、モジュールでおおよそ 180 のリソースが作成される可能性があります。

ヒント

これらのリソースはいずれもサブスクリプションのスコープでデプロイされませんが、Terraform では、Azure との認証済みセッションを確立するためのサブスクリプションが必要です。 Azure での認証の詳細については、Azure プロバイダー: Azure に対する認証に関するドキュメントを参照してください。

管理リソース

このモジュールは、プロバイダー構成 Wiki ページの説明どおりに、Azure ランディング ゾーンの概念アーキテクチャから指定したサブスクリプションに管理と監視のリソースをデプロイできるようにするオプションを提供します。 また、指定したサブスクリプションが適切な管理グループに配置されていることも確認します。

管理リソースに焦点をあてた Azure ランディング ゾーンの概念アーキテクチャの図。

リソースの管理のデプロイを有効にすると、モジュールは次のリソースの種類を ("構成に応じて") デプロイして管理します。

リソース Azure リソースタイプ Terraform リソースタイプ
リソース グループ Microsoft.Resources/resourceGroups azurerm_resource_group
Log Analytics ワークスペース Microsoft.OperationalInsights/workspaces azurerm_log_analytics_workspace
Log Analytics のソリューション Microsoft.OperationsManagement/solutions azurerm_log_analytics_solution
Automation アカウント Microsoft.Automation/automationAccounts azurerm_automation_account
ログ分析のリンクされたサービス Microsoft.OperationalInsights/workspaces /linkedServices azurerm_log_analytics_linked_service

上記のリソースのデプロイに加えて、モジュールは対応するポリシー割り当てへのネイティブ統合を提供して、ポリシーの完全なコンプライアンスを確保します。

この機能の使用方法の詳細については、デプロイ管理リソース Wiki ページを参照してください。

接続のリソース

このモジュールは、Azure ランディング ゾーンの概念アーキテクチャから現在のサブスクリプションのコンテキストにネットワーク トポロジーと接続性のリソースをデプロイできるようにするオプションを提供します。 また、指定したサブスクリプションが適切な管理グループに配置されていることも確認します。

この機能により、従来の Azure ネットワーク トポロジ (ハブとスポーク)Virtual WAN ネットワーク トポロジ (Microsoft マネージド) の任意の組み合わせに基づいて、複数のハブ ネットワークをデプロイできます。

このモジュールでは、DDoS ネットワーク保護 を作成して仮想ネットワークにリンクし、一元化されたパブリックおよびプライベートの DNS ゾーンを管理することもできます。

注意

現在、Azure ランディング ゾーンでは DDoS IP 保護を推奨しておらず、このオプションは特定の限定的な状況での使用をお勧めしています。 Azure DDoS Protection SKU の比較に関する製品ドキュメントを確認する

従来の Azure ネットワーク トポロジ (ハブとスポーク)

モジュールは必要に応じて、従来の Azure ネットワーク トポロジ (ハブとスポーク) に基づいて 1 つ以上のハブ ネットワークをデプロイできます。

従来の Azure ネットワーク トポロジ (ハブとスポーク) を使用した接続リソースに焦点をあてた Azure ランディング ゾーンの概念アーキテクチャの図。

注意

現在、このモジュールで構成されているのは、接続世のサブスクリプションのネットワークハブと依存リソースのみです。 ハブからスポークへの送信 Virtual Network ピアリングを有効にするオプションが用意されていますが、ユーザーは引き続きスポークからハブへのピアリングを開始する必要があります。 これは、 AzureRM プロバイダーがデプロイの特定のサブスクリプションをターゲットにする方法の制限によって発生します。

従来の Azure ネットワーク トポロジ (ハブアンドスポーク) に基づいてリソースをデプロイすると、モジュールは次のリソースの種類を ("構成に応じて") デプロイして管理します。

リソース Azure リソースタイプ Terraform リソースタイプ
リソース グループ Microsoft.Resources/resourceGroups azurerm_resource_group
仮想ネットワーク Microsoft.Network/virtualNetworks azurerm_virtual_network
サブネット Microsoft.Network/virtualNetworks/subnets azurerm_subnet
仮想ネットワーク ゲートウェイ Microsoft.Network/virtualNetworkGateways azurerm_virtual_network_gateway
Azure ファイアウォール Microsoft.Network/azureFirewalls azurerm_firewall
パブリック IP アドレス Microsoft.Network/publicIPAddresses azurerm_public_ip
仮想ネットワークのピアリング Microsoft.Network/virtualNetworks/virtualNetworkPeerings azurerm_virtual_network_peering

この機能の使用方法の詳細については、デプロイ接続リソース Wiki ページを参照してください。

Virtual WAN ネットワーク トポロジ (Microsoft 管理)

モジュールは必要に応じて、Virtual WAN ネットワーク トポロジ (Microsoft マネージド) に基づいて 1 つ以上のハブ ネットワークをデプロイできます。

Virtual WAN ネットワーク トポロジ (Microsoft マネージド) を使用した接続リソースに焦点をあてた Azure ランディング ゾーンの概念アーキテクチャの図。

Note

Virtual WAN ネットワーク リソースの機能は従来とは異なるため、この機能を使用するとき、Virtual WAN スポークのピアリングは双方向です。

Virtual WAN ネットワーク トポロジ (Microsoft マネージド) に基づいてリソースをデプロイすると、モジュールは次のリソースの種類を ("構成に応じて") デプロイして管理します。

リソース Azure リソースタイプ Terraform リソースタイプ
リソース グループ Microsoft.Resources/resourceGroups azurerm_resource_group
仮想 WAN Microsoft.Network/virtualWans azurerm_virtual_wan
仮想ハブ Microsoft.Network/virtualHubs azurerm_virtual_hub
Express Route ゲートウェイ Microsoft.Network/expressRouteGateways azurerm_express_route_gateway
VPN ゲートウェイ Microsoft.Network/vpnGateways azurerm_vpn_gateway
Azure ファイアウォール Microsoft.Network/azureFirewalls azurerm_firewall
Azure Firewall ポリシー Microsoft.Network/firewallPolicies azurerm_firewall_policy
仮想ハブ接続 Microsoft.Network/virtualHubs/hubVirtualNetworkConnections azurerm_virtual_hub_connection

この機能の使用方法の詳細については、デプロイ Virtual WAN リソース Wiki ページを参照してください。

DDoS Protection プラン

このモジュールではオプションとして DDoS ネットワーク保護をデプロイし、必要に応じてそのプランに仮想ネットワークをリンクできます。

Note

プラットフォームの制限により、DDoS Protection プランを有効にできるのは従来の仮想ネットワークのみです。 現在、仮想ハブのサポートは利用できません。

重要

Azure ランディング ゾーンのガイダンスでは、DDoS ネットワーク保護を有効にして Azure プラットフォームの保護を強化することが推奨されています。 このリソースに関連するコストのため、非運用および MVP デプロイでの予期しないコストを防ぐために、Azure ランディング ゾーン Terraform モジュールではこの機能は無効です。

運用環境では、この機能を有効にすることを強くお勧めします。

DDoS Protection プラン リソースのデプロイを有効にすると、モジュールは次のリソースの種類を ("構成に応じて") デプロイして管理します。

リソース Azure リソースタイプ Terraform リソースタイプ
リソース グループ Microsoft.Resources/resourceGroups azurerm_resource_group
DDoS Protection プラン Microsoft.Network/ddosProtectionPlans azurerm_network_ddos_protection_plan

DNS

このモジュールでは必要に応じて、プライベート エンドポイントをサポートするためにプライベート DNS ゾーンをデプロイし、それらをハブまたはスポーク (あるいはその両方) の Virtual Network にリンクできます。 ユーザー指定のパブリックとプライベートの DNS ゾーンも、必要に応じてデプロイしてリンクできます。

DNS リソースのデプロイを有効にすると、モジュールは次のリソースの種類を ("構成に応じて") デプロイして管理します。

リソース Azure リソースタイプ Terraform リソースタイプ
リソース グループ Microsoft.Resources/resourceGroups azurerm_resource_group
DNS ゾーン数 Microsoft.Network/dnsZones azurerm_dns_zone
プライベート DNS ゾーン Microsoft.Network/privateDnsZones azurerm_private_dns_zone
プライベート DNS ゾーンの Virtual Network リンク Microsoft.Network/privatednszones/virtualnetworklinks azurerm_private_dns_zone_virtual_network_link

ID リソース

このモジュールは、ID とアクセス管理のランディング ゾーンに関連するポリシーを構成するオプションを提供します。 また、指定したサブスクリプションが適切な管理グループに配置されていることも確認します。

ID リソースに焦点をあてた Azure ランディング ゾーンの概念アーキテクチャの図。

Note

この機能では、いずれのリソースもデプロイされません。 ID 管理グループに関連するポリシー設定を更新する場合は、入力変数を configure_identity_resources 使用します。

この機能の使用方法の詳細については、デプロイ ID リソース Wiki ページを参照してください。

作業の開始

モジュールでの作業を開始するための要件については、作業の開始 Wiki ページを参照してください。

開始を簡単にするために、モジュールは Terraform レジストリ。 この記事の後の 簡単な例 に示すように、コード内で直接参照できます。 terraform initを実行すると、モジュールとすべての依存関係が自動的にダウンロードされます。

モジュールとプロバイダーの最新の依存関係は、Terraform レジストリの[依存関係] タブで確認できます。

重要

一部の Terraform と AzureRM プロバイダーのバージョンの組み合わせには既知の問題があります。 最新の Terraform および AzureRM プロバイダーのバージョンにアップグレードすることで、いくつかの既知の問題を解決できます。 Other known issues are transient errors that you can typically fix by rerunning your deployment.

通常、アップグレードする前に、特定のバージョンに固定し、テストを十分に行うことをお勧めします。

変更が必要な場合は、モジュールの新しいバージョンがリリースされます。 新しいリリースでは、最新の Terraform および AzureRM プロバイダーのバージョンとの互換性が確保されます。 詳細については、モジュールのリリース ガイダンスを参照してください。

最新の機能を入手するには、モジュールのバージョンが最新バージョンに設定されていることを確認します。 モジュールの新しいバージョンにアップグレードする場合は、terraform init -upgradeを実行してください。

GitHub リリース(最新の SemVer)

簡単な例

このコード例では、エンタープライズ規模の参照アーキテクチャから、推奨される最小の管理グループとサブスクリプションの組織をデプロイします。 この簡単な例を作成して実行した後、デプロイのカスタマイズを開始できます。

ヒント

root_parent_idは、モジュールの唯一の必須変数ですが、root_idを設定することもお勧めします。 値を変更すると、 root_id ダウンストリームの依存関係を含む、モジュールによって管理されるすべてのリソースの完全な再展開が開始されます。

ルート モジュールmain.tf の単純な開始構成を次のコードに示します。

# Configure Terraform to set the required AzureRM provider
# version and features{} block.

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = ">= 2.77.0"
    }
  }
}

provider "azurerm" {
  features {}
}

# Get the current client configuration from the AzureRM provider.
# This configuration is used to populate the root_parent_id variable with the
# current tenant ID used as the ID for the "Tenant Root Group"
# management group.

data "azurerm_client_config" "core" {}

# Use variables to customize the deployment

variable "root_id" {
  type    = string
  default = "es"
}

variable "root_name" {
  type    = string
  default = "Enterprise-Scale"
}

# Declare the Terraform Module for Cloud Adoption Framework
# Enterprise-scale and provide a base configuration.

module "enterprise_scale" {
  source  = "Azure/caf-enterprise-scale/azurerm"
  version = ">= 1.0.0"

  providers = {
    azurerm              = azurerm
    azurerm.connectivity = azurerm
    azurerm.management   = azurerm
  }

  root_parent_id = data.azurerm_client_config.core.tenant_id
  root_id        = var.root_id
  root_name      = var.root_name

}

次のステップ

クラウド導入フレームワーク エンタープライズ規模の Terraform モジュールは、エンタープライズ規模のランディング ゾーンを迅速に構築するためのパスを提供します。 また、各ランディング ゾーンの構成を管理するための簡素化されたアプローチを維持しながら、デプロイを拡張およびカスタマイズする柔軟性を提供します。

詳細については、Terraform レジストリでモジュールを確認し、GitHub で モジュールのドキュメントを調べてください。 ドキュメントには、デプロイをカスタマイズする方法に関するその他の例とチュートリアルが記載されています。

HashiCorp Learn 経由で Azure ランディングゾーン Terraform モジュールをデプロイする方法を説明します。 また、モジュールの一部の機能がどのように動作するかを確認することもできます。