高度なシナリオでの Azure Export for Terraform の使用
この記事では、Azure Export for Terraform を使用して、より高度なタスクの一部を実行する方法について説明します。
- 既存の Terraform 環境にリソースを追加します。
- リモート バックエンド状態の既存の Terraform 環境にリソースをエクスポートする
既存のリソースへの追加
既定では、Azure Export for Terraform では、既存のユーザー ファイルとの競合を回避するために、出力ディレクトリが空になります。 既存の状態ファイルにリソースをインポートする必要がある場合は、--append
フラグを追加します。
aztfexport [command] --append <scope>
--append
フラグを指定すると、Azure Export for Terraform は、現在のディレクトリ内のいずれかのファイルに既存 provider
または terraform
ブロックがあるかどうかを確認します。 そうでない場合、ツールはブロックごとにファイルを作成し、エクスポートを続行します。 出力ディレクトリに状態ファイルがある場合、エクスポートされたリソースはすべて状態ファイルにインポートされます。
さらに、生成されるファイルには拡張子の前に .aztfexport
サフィックスが付いています - 例: main.aztfexport.tf
- これはファイル名の競合の可能性を回避するためです。
aztfexport --append
を複数回実行すると、ファイルに追加されたエクスポート結果とともに、単一の main.aztfexport.tf
がコマンドが実行されるたびに作成されます。
独自の Terraform 構成を使用する
既定では、Azure Export for Terraform はローカル バックエンドを使用して状態ファイルを格納します。 ただし、リモート バックエンドを使用することもできます。 Azure Export for Terraform を使用すると、独自の terraform
または provider
ブロックを定義して受け渡しできます。
ターゲット ディレクトリ内の .tf
ファイルでこれらのブロックを定義し、--append
フラグを使用してエクスポートし、構成を指定したバックエンドとプロバイダーのバージョン (指定されている場合) にエクスポートします。
重要
エクスポート時に、指定したバージョンの AzureRM がインストールされているバージョンと一致しない場合、コマンドは失敗します。
Azure Storage の例
この例は、記事「Azure Storage に Terraform 状態を格納する」に基づいています。
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~>3.0"
}
}
backend "azurerm" {
resource_group_name = "tfstate"
storage_account_name = "storageacc"
container_name = "tfstate"
key = "terraform.tfstate"
}
}
provider "azurerm" {
features {}
}
Terraform Cloud の例
terraform {
cloud {
organization = "aztfexport-test"
workspaces {
name = "aztfexport-playground"
}
}
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~>3.0"
}
}
}
provider "azurerm" {
features {
}
}
インライン エクスペリエンス
バックエンドにインラインでエクスポートするには、--backend-type
and--backend-config
オプションを使用します。 Terraform バックエンドの構成の詳細については、「Terraform バックエンドの構成」を参照してください。
Azure ストレージ アカウントの例を使用する場合は、「AzureRM バックエンド ドキュメント」で 定義されている次のものが必要です。
- リソース グループ名
- ストレージ アカウント名
- ストレージ コンテナー名
これらのパラメーターを、バックエンドの種類と共にコマンドに渡します。
aztfexport [subcommand] --backend-type=azurerm \
--backend-config=resource_group_name=<resource group name> \
--backend-config=storage_account_name=<account name> \
--backend-config=container_name=<container name> \
--backend-config=key=terraform.tfstate
重要なポイント:
- 前の例では、Unix 行継続文字を使用して、コードがブラウザにうまく表示されるようにしています。 PowerShell などのコマンド ライン環境に合わせてこれらの文字を変更するか、コマンドを 1 行に結合することが必要な場合があります。
- バックエンドの状態が既に存在する場合、Azure Export for Terraform は新しいリソースを既存の状態と自動的にマージします。 オプション インライン
--append
を指定する必要はありません。
Azure リソースを既存の Terraform 環境にエクスポートする
それでは、まとめてみましょう。 Terraform の管理に移動する必要がある新しいリソースが Terraform の外部で作成されたとします。 セクションを完了するには、バックエンドが構成されていることを確認します。 このチュートリアルでは、Azure Storage リモート状態のチュートリアルで指定されているものと同じ構成を使用します。
一時ディレクトリを作成する親ディレクトリで、次のコマンドを実行します。
aztfexport resource -o tempdir --hcl-only <resource_id>
重要なポイント:
- ディレクトリが存在しない場合、
-o
フラグが作成するように指定します。 --hcl-only
フラグが構成されたリソースを HCL にエクスポートするように指定します。
- ディレクトリが存在しない場合、
リソースを追加できることを調査したら、生成されたマッピング ファイルと
--append
フラグを使用して、Azure Export が既存の環境内の既存のリモート状態とプロバイダーのバージョンと一致していることを確認します。aztfexport map --append `./tempdir/aztfexportResourceMapping.json`
terraform init を実行します。
terraform init --upgrade
terraform plan を実行します。
Azure Export for Terraform には、[変更は必要ありません] と表示されます。
おめでとうございます。 インフラストラクチャとそれに対応する状態が Terraform 環境に正常に追加されました。
プランで問題が発生する場合は、「Azure Export for Terraform の概念」を参照して、生成されたコードのデプロイに関する制限事項をご覧ください--hcl-only
。 その記事が役に立たない場合は、GitHub の問題をご覧ください。
クエリをさらにカスタマイズする
上記以外の高度なフラグとその使用方法について説明します。
クラウド環境の選択
パブリック クラウド以外の別の環境を指定するには、--env
フラグを使用します。 たとえば、米国政府の場合は次のようになります。
aztfexport [command] --env="usgovernment" [further options] <scope>
Terraform プロバイダー バージョンの変更
優先する AzureRM
または AzAPI
バージョンに簡単にアクセスするには、--provider-version
フラグを使用します。 たとえば、AzAPI
バージョン 1.10.0
の場合は、次のようになります。
aztfexport [command] --provider-name=azapi --provider-version=1.10.0 [further options] <scope>
認証
認証構成の管理用には、さまざまなフラグが存在します。 一部のフラグは、v0.15
で追加されました。
--env
--tenant-id
--auxiliary-tenant-ids
--client-id
--client-id-file-path
--client-certificate
--client-certificate-path
--client-certificate-password
--client-secret
--client-secret-file-path
--oidc-request-token
--oidc-request-url
--oidc-token
--oidc-token-file-path
--use-managed-identity-cred
(既定値は false)--use-azure-cli-cred
(既定値は true)--use-oidc-cred
(既定値は false)
上記のフラグは、azurerm
プロバイダーの命名規則に従っています。 すべてのフラグは環境変数を介した構成も可能です。これには azurerm
プロバイダーで定義されているものと同じ環境変数が含まれます。
aztfexport
は、次の順序で各資格情報タイプを使用して認証を試行し、トークンが提供されると停止します。
- クライアント シークレット
- クライアント証明書
- OIDC
- マネージド ID
- Azure CLI
1 つ以上の use-xxx-cred
が true でない場合、その資格情報タイプはスキップされます。 この動作はプロバイダーと同じです。
プロバイダー構成は、aztfexport
からの認証構成をオーバーライドできます。 これによりユーザーは、aztfexport
とプロバイダーで異なる資格情報タイプを使用できるようになります。
ロールの割り当てを含める
リソースのスコープをエクスポートするときにロールの割り当てを含める場合は、--include-role-assignment
コマンドを使用します。
aztfexport [command] --include-role-assignment [further options] <scope>