【Terraform】ステートファイルをAzure Blob Storageで管理する方法

本記事では、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リソースを構築/変更するたびに、そのリソースのパラメータがステートファイルに書き込まれていきます。

Azure Blob Storageのtfstateコンテナにステートファイルがアップロードされました!

 

まとめ

チームで作業を行う場合には、ステートファイルの共有とロック機能が重要となります。
本記事で紹介したように、ストレージを作成しTerraformの設定ファイルに数行追記するだけで簡単にAzure Blob Storageでの管理に設定できますので、Azureリソース構築にTerraformを使う際にはぜひご参照ください。

著者について
町田洋をフォローする

クラウドに強いによるエンジニアブログです。

SCSKクラウドサービス(Azure)は、Azureを最大限活用するためのオールインワンサービスです。40年以上の様々なシステム構築・運用実績で得た業界理解と、Azure構築ナレッジを強みに、クラウドへの移行から運用までトータルでサポートし、お客様のAzure活用を実現します。

Azure
シェアする
タイトルとURLをコピーしました