🌏
Terraform Stateの管理
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などのリモートストレージを利用する。
リモートに保存する方法は、以下の手順で行う。
- リモートストレージを作成する
- 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