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

具有共享terraform代码库的多个开发人员工作流,terraform,devops,Terraform,Devops,我是团队中的新手,该团队在开发过程中编写了大量TF代码。TF状态存储在远程S3存储桶中。当我在自己的分支完成工作时,我实现了从分支部署的TF对象 resource "aws_s3_bucket" "b" { bucket = "my-tf-test-bucket" acl = "private" tags = { Name = "My bucket" Environment = "Dev" } } 将被其他开发人员删除,因为他使用自己的分支

我是团队中的新手,该团队在开发过程中编写了大量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.
从最佳实践的角度来看,这类工作必须如何组织?
谢谢

我们过去的策略是 1.使用项目和资源部署的区域命名s3 bucket后端 2.在同时工作的开发人员之间划分区域


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

我们过去的策略是 1.使用项目和资源部署的区域命名s3 bucket后端 2.在同时工作的开发人员之间划分区域


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

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


我不一定确定这是否是最佳实践,但它对我们很有效。

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


我不一定确定这是否是最佳实践,但它对我们很有效。

我不确定我是否理解问题所在。。。所以他要么使用自己的环境进行本地更改,要么先合并以掌握并解决冲突以部署到共享环境。这里还能做些什么?您要解决的问题到底是什么?您应该管理文件夹中的资源。每个文件夹都是一个工作区根目录。这样,每个开发人员只会影响他们自己的文件夹,而不会影响其他人。我不知道问题出在哪里。。。所以他要么使用自己的环境进行本地更改,要么先合并以掌握并解决冲突以部署到共享环境。这里还能做些什么?您要解决的问题到底是什么?您应该管理文件夹中的资源。每个文件夹都是一个工作区根目录。这样,每个开发人员只影响他们自己的文件夹,而不影响其他人。