LoginSignup
7
2

More than 1 year has passed since last update.

複数人でterraformを扱う際に気を付ける事

Last updated at Posted at 2021-05-16

複数人でterraformを扱う際に気を付ける事

image.png

上の図の補足

上の図の補足をします。
10:00前の時点では、AさんとBさんのtfstateファイルは同じ状態だったとします。
Aさんが10:00にAWS上にリソースAをデプロイする為、terraform applyを実行したとします。
するとAWS上にはリソースAがデプロイされ、AさんのtfstateにはリソースAがデプロイされたことが記録されます。
この時点でAさんとBさんのtfstateファイルに差異が生まれます。
すると10:05という同じ時間にterraform planを行ったとしてもAさんとBさんの結果は異なり、
Bさんがterraform applyを実行しようとすると既にAWS上にリソースAは存在する為、エラーが発生します。

-解決法- backend設定①

terraformには複数人で作業をするための設定としてbackend設定が存在します。

provider.tf
terraform {
  backend "s3" {
    bucket = "tfstate-test"
    key    = "tfstate"
    region = "ap-northeast-1"
  }
}

予め、S3上でtfstate-testという名前のバケットを作成しておき、terraform initを実行します。
これでtfstateファイルを複数人で共有することができます。

-解決法- backend設定②

上記の設定だけでは、複数人が同時にapplyやdestroyすることを防げません。

そこでまず、dynamodbをデプロイしてください。

main.tf
resource "aws_dynamodb_table" "terraform-state-lock" {
  name           = "tfstate_lock"
  read_capacity  = 1
  write_capacity = 1
  hash_key       = "LockID"

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

その後、backend設定を以下のように書き換えます。

provider.tf
terraform {
  backend "s3" {
    bucket = "tfstate-test"
    key    = "tfstate"
    region = "ap-northeast-1"
    dynamodb_table ="tfstate_lock"
  }
}

これで、terraform applyやterraform destroyを実行する際にはtfstateファイルがロックされ、複数人が同時にapplyやdestroyすることができなくなります。

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2