本記事では、TerraformでAzure環境構築を行う際に、ステートファイルをAzure Blob Storageで管理するための手順を解説します。
ステートファイルとは
ステートファイルは、Terraformが管理するリソース(仮想マシン、ストレージ、ネットワーク等)の最新の状態が記述されたファイルです。このファイルによりTerraformは現在のインフラの構成を認識し、次回の処理時にどのリソースを追加・変更・削除するかを判断します。
ステートファイルの主な管理方法
1. ローカル
複数人での共有/ロック管理/バージョニングが行えません。個人開発や試験的利用では、ローカル管理でも問題ありません。
2. クラウド上のストレージ
AWSではS3、AzureではAzure Blob Storage、Google CloudではGoogle Cloud Storageで管理できます。
複数人での共有/ロック管理/バージョニングも設定次第で行えます。
本記事では、Azure Blob Storageで管理する方法を解説します。
3. Terraform Cloud
Hashicorpが提供しているTerraform公式のマネージドサービスです。クラウド上のストレージでの管理と同様に、複数人での共有/ロック管理/バージョニングも可能なため、Terraform Cloudを利用している場合はこのサービスで管理することをお勧めします。
手順
Azure Blob Storageの構築
Azure Blob Storageの作成はポータル上で行っても問題ありません。
Terraformで構築する場合は以下ようなファイルを使用し、リソースグループ、ストレージアカウント、Azure Blob Storageを構築します。
provider "azurerm" { features {} } # リソースグループ resource "azurerm_resource_group" "example" { name = "myResourceGroup" location = "japaneast" } # ストレージアカウント resource "azurerm_storage_account" "example" { name = "mytfstateaccount" resource_group_name = azurerm_resource_group.example.name location = azurerm_resource_group.example.location account_tier = "Standard" account_replication_type = "LRS" } # Azure Blob Storage resource "azurerm_storage_container" "example" { name = "tfstate" storage_account_name = azurerm_storage_account.example.name container_access_type = "private" }
Terraformのバックエンド設定
Terraformの設定ファイル(構築するリソースのパラメータやTerraform自体の設定を記述するファイル)に以下のコードを記述し、手順1で作成したストレージをステートファイルの管理先として指定します。
terraform { backend "azurerm" { resource_group_name = "myResourceGroup" storage_account_name = "mytfstateaccount" container_name = "tfstate" key = "terraform.tfstate" } }
Terraform初期化
以下のコマンドを実行し、Terraformを初期化します。
terraform init
初期化に成功するとプラグインのダウンロードやバックエンドの初期化が行われ、手順2で管理先として指定したストレージにステートファイル(terraform.tfstate)がアップロードされます。(下記画像参照)
以降Terraformを使用してAzureリソースを構築/変更するたびに、そのリソースのパラメータがステートファイルに書き込まれていきます。
まとめ
チームで作業を行う場合には、ステートファイルの共有とロック機能が重要となります。
本記事で紹介したように、ストレージを作成しTerraformの設定ファイルに数行追記するだけで簡単にAzure Blob Storageでの管理に設定できますので、Azureリソース構築にTerraformを使う際にはぜひご参照ください。