在多人使用Terraform时需要注意的事项
在多人处理terraform时需要注意的事项
上面图表的附加说明
在上面的图中进行补充说明。
假设在10:00之前,A和B的tfstate文件处于相同的状态。
假设A在10:00时在AWS上部署资源A,执行terraform apply。
然后,在AWS上部署了资源A,并且记录在A的tfstate中。
这时,A和B的tfstate文件会产生差异。
因此,即使在同一时间10:05进行terraform plan,A和B的结果也是不同的,
当B尝试执行terraform apply时,由于AWS上已经存在资源A,将会产生错误。
-方法一- 解决后端设置问题
terraform有一个用于多人协作工作的设置,即后端设置。
terraform {
backend "s3" {
bucket = "tfstate-test"
key = "tfstate"
region = "ap-northeast-1"
}
}
在开始之前,请先在S3上创建名为tfstate-test的存储桶,并执行terraform init命令。这样,您就可以与其他人共享tfstate文件了。
– 解决方案 – 后端设置 ②
只有上述设置是不足以阻止多人同时进行申请或销毁。
那么首先,请部署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"
}
}
然后,将后端设置改写如下。
terraform {
backend "s3" {
bucket = "tfstate-test"
key = "tfstate"
region = "ap-northeast-1"
dynamodb_table ="tfstate_lock"
}
}
当执行terraform apply或terraform destroy时,tfstate文件将被锁定,防止多人同时进行apply或destroy操作。