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ランディングゾーンのための中心的なリソース組織。
コア リソースのデプロイ ("既定で有効") を有効にすると、モジュールは次のリソースの種類をデプロイおよび管理します。
モジュールに作成されるリソースの正確な数は、モジュールの構成によって異なります。 既定の構成では、モジュールでおおよそ 180
のリソースが作成される可能性があります。
ヒント
これらのリソースはいずれもサブスクリプションのスコープでデプロイされませんが、Terraform では、Azure との認証済みセッションを確立するためのサブスクリプションが必要です。 Azure での認証の詳細については、Azure プロバイダー: Azure に対する認証に関するドキュメントを参照してください。
管理リソース
このモジュールは、プロバイダー構成 Wiki ページの説明どおりに、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 つ以上のハブ ネットワークをデプロイできます。
注意
現在、このモジュールで構成されているのは、接続世のサブスクリプションのネットワークハブと依存リソースのみです。 ハブからスポークへの送信 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 つ以上のハブ ネットワークをデプロイできます。
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 とアクセス管理のランディング ゾーンに関連するポリシーを構成するオプションを提供します。 また、指定したサブスクリプションが適切な管理グループに配置されていることも確認します。
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
を実行してください。
簡単な例
このコード例では、エンタープライズ規模の参照アーキテクチャから、推奨される最小の管理グループとサブスクリプションの組織をデプロイします。 この簡単な例を作成して実行した後、デプロイのカスタマイズを開始できます。
ヒント
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 モジュールをデプロイする方法を説明します。 また、モジュールの一部の機能がどのように動作するかを確認することもできます。