在多人使用Terraform时需要注意的事项

在多人处理terraform时需要注意的事项

image.png

上面图表的附加说明

在上面的图中进行补充说明。
假设在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操作。

广告
将在 10 秒后关闭
bannerAds