次の Terraform と Terraform プロバイダーのバージョンでテストされた記事:
Terraformはクラウドインフラストラクチャの定義、プレビュー、そしてデプロイメントを可能にします。 Terraform を使用する際は、HCL 構文を使って構成ファイルを作成します。 HCL 構文を使用すると、クラウド プロバイダー (Azure など) とクラウド インフラストラクチャを構成する要素を指定できます。 あなたの設定ファイルを作成した後、実行計画を作成します。これにより、インフラストラクチャの変更をデプロイする前にプレビューすることができます。 変更を確認したら、実行プランを適用してインフラストラクチャをデプロイします。
AzAPI Terraform プロバイダー を使用して、AzureRM でまだサポートされていないAzure サービスの新機能を管理します。 この例では、azapi_update_resource を使用して、ネットワーク 規則Azure Event Hubs構成します。
- AzureRM を使用して Event Hubs 名前空間とルールを作成する
- AzAPI を使用してネットワーク 規則を使用して名前空間を更新する
- Event Hubs 名前空間のランダムな名前を生成する
- AzureRM プロバイダーを使用して、Azure リソース グループと必要なネットワークおよび Event Hubs リソースを作成します
- AzAPI プロバイダーを使用して、
azurerm_eventhub_namespaceリソースにネットワーク ルール セットを追加する
注
この記事のコード例は、 Azure Terraform GitHub リポジトリにあります。
[前提条件]
- Azure サブスクリプション:Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
Terraform の構成: まだ構成していない場合は、次のいずれかのオプションを使用して Terraform を構成します。
- Bash を使用して Azure Cloud Shell で Terraform を構成する
- PowerShell を使用して Azure Cloud Shell で Terraform を構成する
- Bash を使用して Windows で Terraform を構成する
- PowerShell を使用して Windows で Terraform を構成する
- Bash を使用して Azure Cloud Shell で Terraform を構成する
Microsoft アカウントを使用して Azure portal にログインすると、そのアカウントの既定の Azure サブスクリプションが使用されます。
Terraform は、既定の Azure サブスクリプションの情報を使用して自動的に認証します。
az account show を実行して、現在の Microsoft アカウントと Azure サブスクリプションを確認します。
az account show
Terraform を使用して行った変更は、表示される Azure サブスクリプション上にあります。 これが必要な場合は、この記事の残りの部分をスキップしてください。
Terraform コードを実装する
サンプルの Terraform コードをテストするディレクトリを作成し、それを現在のディレクトリにします。
providers.tfという名前のファイルを作成し、次のコードを挿入します。terraform { required_providers { azapi = { source = "azure/azapi" version = "=0.1.0" } azurerm = { source = "hashicorp/azurerm" version = "=3.0.2" } random = { source = "hashicorp/random" version = "=3.1.2" } } } provider "azapi" { } provider "azurerm" { features {} } provider "random" { }main.tfという名前のファイルを作成し、次のコードを挿入します。resource "azurerm_resource_group" "qs101" { name = "rg-qs101-eh-rules" location = "westus2" } resource "azurerm_virtual_network" "qs101" { name = "myvnet" location = azurerm_resource_group.qs101.location resource_group_name = azurerm_resource_group.qs101.name address_space = ["172.17.0.0/16"] dns_servers = ["10.0.0.4", "10.0.0.5"] } resource "azurerm_subnet" "qs101" { name = "default" resource_group_name = azurerm_resource_group.qs101.name virtual_network_name = azurerm_virtual_network.qs101.name address_prefixes = ["172.17.0.0/24"] service_endpoints = ["Microsoft.EventHub"] } resource "random_pet" "qs101_namespace" { length = 3 separator = "" } resource "azurerm_eventhub_namespace" "qs101" { name = random_pet.qs101_namespace.id location = azurerm_resource_group.qs101.location resource_group_name = azurerm_resource_group.qs101.name sku = "Standard" capacity = 2 }main-generic.tfという名前のファイルを作成し、次のコードを挿入します。# AzAPI update resource is used to enable Network Rule sets on Event Hub namespace resource "azapi_update_resource" "qs101" { type = "Microsoft.EventHub/namespaces/networkRuleSets@2021-11-01" name = "default" parent_id = azurerm_eventhub_namespace.qs101.id body = jsonencode({ properties = { defaultAction = "Deny" publicNetworkAccess = "Enabled" virtualNetworkRules = [ { ignoreMissingVnetServiceEndpoint = false subnet = { # API bug, returned id replaced `resourceGroups` with `resourcegroups` id = replace(azurerm_subnet.qs101.id, "resourceGroups", "resourcegroups") } } ] ipRules = [ { action = "Allow" ipMask = "1.1.1.1" } ] } }) }
Terraform を初期化する
terraform init
terraform init -upgrade
重要なポイント:
-
-upgradeパラメーターは、必要なプロバイダー プラグインを、構成のバージョン制約に準拠する最新バージョンにアップグレードします。
Terraform実行計画を作成する
実行計画を作成するために terraform plan を実行してください。
terraform plan -out main.tfplan
重要なポイント:
-
terraform planコマンドは実行プランを作成しますが、実行はしません。 代わりに、それは設定ファイルで指定された設定を作成するために必要な手順を決定します。 このパターンを使用すると、実際のリソースに変更を加える前に、実行プランが期待と一致するかどうかを確認できます。 - 任意の
-outパラメーターを使用すると、プランの出力ファイルを指定することができます。-outパラメーターを使用すると、レビューしたプランがそのまま適用されることが保証されます。
Terraform 実行プランを適用する
クラウドインフラストラクチャに対して実行計画を適用するには、terraform apply を実行してください。
terraform apply main.tfplan
重要なポイント:
-
terraform applyコマンドの例では、以前にterraform plan -out main.tfplanを実行していることを前提としています。 -
-outパラメーターに別のファイル名を指定した場合は、terraform applyへの呼び出しで同じファイル名を使用してください。 -
-outパラメーターを使用しなかった場合は、パラメーターを指定せずにterraform applyを呼び出します。
結果を確認してください。
az eventhubs namespace network-rule-set show を実行して、Event Hubs 名前空間ネットワーク ルールを表示します。
az eventhubs namespace network-rule show --resource-group <resource_group_name> --namespace-name <namespace_name>
重要なポイント:
- リソース グループ名と Event Hubs 名前空間名は、
terraform apply出力に表示されます。
リソースをクリーンアップする
Terraform を使用して作成されたリソースが不要になったら、次の手順を実行します。
terraform plan を実行し、
destroyフラグを指定してください。terraform plan -destroy -out main.destroy.tfplan重要なポイント:
-
terraform planコマンドは実行プランを作成しますが、実行はしません。 代わりに、それは設定ファイルで指定された設定を作成するために必要な手順を決定します。 このパターンを使用すると、実際のリソースに変更を加える前に、実行プランが期待と一致するかどうかを確認できます。 - 任意の
-outパラメーターを使用すると、プランの出力ファイルを指定することができます。-outパラメーターを使用すると、レビューしたプランがそのまま適用されることが保証されます。
-
terraform applyを実行して、実行プランを適用します。
terraform apply main.destroy.tfplan
Azure での Terraform のトラブルシューティング
Azure で Terraform を使用する際の一般的な問題をトラブルシュートする