本記事では、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を使う際にはぜひご参照ください。
