Terraform

TerraformのBackend機能を利用して.tfstateを管理する

Backend機能とは

  • .tfstateファイルをどこで管理するか設定できる機能
  • Gitで管理しない理由はHow to manage Terraform stateを参照
  • 今回はS3とDynamoDBを利用する設定を行う

S3とDynamoDBを作成

S3の設定

  • まずはプライベートバケットを作成する
  • このバケットに.tfstateファイルを保存していく
  • 設定を戻す時のためにバージョニングを有効にすること
resource "aws_s3_bucket" "terraform-state-storage" {
  bucket = "terraform-state-storage"
  acl    = "private"

  versioning {
    enabled = true
  }
}

DynamoDBの設定

  • 次にロックテーブルを作成する
  • 最低限でいいのでRC/WCは1にする
resource "aws_dynamodb_table" "terraform-state-lock" {
  name           = "terraform-state-lock"
  read_capacity  = 1
  write_capacity = 1
  hash_key       = "LockID"

  attribute {
    name = "LockID"
    type = "S"
  }
}

実行

  • 上で設定した分を実行する
terraform init
terraform apply

Backend設定

  • 先にS3とDynamoDBを作っておかないとエラーになる
  • bucketに上で作ったバケット名、dynamo_tableにテーブル名
  • keyに設定した名前で.tfstateファイルが保存される
    • 環境毎に名前を変更することで環境毎に保存することも可能
terraform {
  required_version = ">= 0.11.7"

  backend "s3" {
    bucket         = "terraform-state-storage"
    key            = "terraform.tfstate"
    region         = "ap-northeast-1"
    dynamodb_table = "terraform-state-lock"
  }
}

実行・確認

  • init, applyした後、S3を確認すると、keyで設定した名前でファイルが登録されている