🌏

Terraform Stateの管理

2024/04/20に公開

Terraformでインフラを管理する際に、Terraform Stateの管理方法についてまとめる。

Terraform Stateとは

Terraformは、インフラの状態を管理するために、Terraform Stateというファイルを利用する。このファイルには、Terraformが管理しているリソースの情報が保存されており、Terraformがリソースの状態を管理するために利用される。

Terraform Stateの管理方法

Terraform Stateの管理方法には、ローカルに保存する方法とリモートに保存する方法がある。

ローカルに保存する方法

Terraform Stateをローカルに保存する方法は、Terraformが自動的に作成する terraform.tfstate ファイルを利用する。

リモートに保存する方法

Terraform Stateをリモートに保存する方法は、Azure Blob StorageやAWS S3などのリモートストレージを利用する。

リモートに保存する方法は、以下の手順で行う。

  1. リモートストレージを作成する
  2. Terraformがリモートストレージを利用するように設定する

実際にどうすればよいか

Azureの場合

azure-cliを利用して、Azure Blob Storageを作成する。

## リソースグループを作成
az group create \
  --name $リソース名 \
  --location japaneast

## ストレージアカウントを作成
az storage account create \
  --resource-group $リソース名 \
  --name $ストレージアカウント名 \
  --sku Standard_LRS \
  --encryption-services blob

## コンテナーを作成
az storage container create \
  --name $コンテナ名 \
  --account-name $ストレージアカウント名

Terraform Stateをリモートストレージに保存するために、main.tf ファイルに以下の設定を追加する。

terraform {
  backend "azurerm" {
    resource_group_name   = "$リソース名"
    storage_account_name  = "$ストレージアカウント名"
    container_name        = "$コンテナ名"
    key                   = "$任意のファイルパス/terraform.tfstate"
  }
}

AWSの場合

AWS CLIを利用して、AWS S3バケットを作成する。

## バケットを作成
aws s3api create-bucket \
  --bucket $バケット名 \
  --region $リージョン

state lockを有効にするためDynamoDBテーブルを作成する。

aws dynamodb create-table \
  --table-name $テーブル名 \
  --attribute-definitions AttributeName=LockID,AttributeType=S \
  --key-schema AttributeName=LockID,KeyType=HASH \
  --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1

Terraform Stateをリモートストレージに保存するために、main.tf ファイルに以下の設定を追加する。

terraform {
  backend "s3" {
    bucket  = "$バケット名"
    key     = "terraform.tfstate"
    region  = "$リージョン"
    encrypt = true
    dynamodb_table = "$テーブル名"
  }
}

参考文献

Discussion