具有共享terraform代码库的多个开发人员工作流

时间:2019-06-03 20:02:45

标签: terraform devops

我是团队的新手,该团队在开发过程中做了很多TF代码。 TF状态存储在远程S3存储桶中。在自己的分支中完成工作后,我意识到从分支

部署了TF对象。
resource "aws_s3_bucket" "b" {
  bucket = "my-tf-test-bucket"
  acl    = "private"

  tags = {
    Name        = "My bucket"
    Environment = "Dev"
  }
}

将被另一个开发人员删除,因为他使用了自己的分支,该分支中没有该对象。确实,当他运行自己的Terraform应用程序时,他得到了以下信息:

$ terraform apply -target=module.s3
aws_s3_bucket.b: Refreshing state... (ID: my-tf-test-bucket)

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  - destroy
Terraform will perform the following actions:
  - module.s3.aws_s3_bucket.b
Plan: 0 to add, 0 to change, 1 to destroy.

从最佳实践的角度来看,如何组织这类工作? 谢谢!

2 个答案:

答案 0 :(得分:0)

我们过去遵循的策略是 1.用项目和部署资源的区域命名s3存储桶后端 2.在同时工作的开发人员中划分区域

这样,每个开发人员将tfstate存储在不同的存储桶中。当然,开发人员之间必须达成口头协议才能成功做到这一点。如果团队太大,我想您可以做的就是在后端存储桶名称中也包含用户ID。

答案 1 :(得分:0)

我们为每个开发人员提供了不同的开发环境(当前有两个)。为此,通常我们会为资源添加一些标识符(该变量是通过terraform主文件中拾取的命令行设置的),以便在同一帐户中的不同环境之间不会发生冲突。变更获得批准后,它将转移到我们的CI环境中,该环境仅部署过去超过开发人员的变更(变更由管道自动执行,而开发人员从未完成)。您不应该在开发环境上共享这样的共享状态,因为这样经常会遇到您遇到的问题。

我不确定这是否是 最佳实践 ,但这对我们来说很好。