複数人でterraformを扱う際に気を付ける事
上の図の補足
上の図の補足をします。
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設定が存在します。
terraform {
backend "s3" {
bucket = "tfstate-test"
key = "tfstate"
region = "ap-northeast-1"
}
}
予め、S3上でtfstate-testという名前のバケットを作成しておき、terraform initを実行します。
これでtfstateファイルを複数人で共有することができます。
-解決法- backend設定②
上記の設定だけでは、複数人が同時にapplyやdestroyすることを防げません。
そこでまず、dynamodbをデプロイしてください。
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設定を以下のように書き換えます。
terraform {
backend "s3" {
bucket = "tfstate-test"
key = "tfstate"
region = "ap-northeast-1"
dynamodb_table ="tfstate_lock"
}
}
これで、terraform applyやterraform destroyを実行する際にはtfstateファイルがロックされ、複数人が同時にapplyやdestroyすることができなくなります。