Terraform 多个开发人员和地形状态文件

Terraform 多个开发人员和地形状态文件,terraform,Terraform,几个月来,我一直在自己管理我们的地形代码。现在我的团队中有了更多的团队成员,我希望他们学习TF并使用我现有的代码构建东西。状态文件存储在S3中。对于每个环境,我都运行以下命令 terraform init -backend=true \ -backend-config="bucket=acme-dev-tfstates" \ -backend-config="key=frontendapp.tfstate" \ -backend-config="region=us-eas

几个月来,我一直在自己管理我们的地形代码。现在我的团队中有了更多的团队成员,我希望他们学习TF并使用我现有的代码构建东西。状态文件存储在S3中。对于每个环境,我都运行以下命令

terraform init -backend=true \
    -backend-config="bucket=acme-dev-tfstates" \
    -backend-config="key=frontendapp.tfstate" \
    -backend-config="region=us-east-1" \
    -backend-config="encrypt=true"

假设我的同事想对代码做出贡献。他从Github签出代码,是否需要再次运行上述命令

是的,所有人都需要确保正确配置状态,以便在没有从S3中拉入和推送状态的情况下,不会有人意外地进行更改

您还应该考虑使用状态锁定(Stand状态后端用DyDoDB),这样您就不会有多人同时对同一资源进行更改,可能会损坏您的状态文件。


编写自动处理状态配置和拉取模块等的助手脚本可能会有所帮助,这样就不可能在正常操作中不配置状态。

我们的一条规则是,如果您在非生产系统中破坏状态文件,您将拥有修复它们的问题和乐趣。其中一次经历让人们非常渴望避免重复经历;)


对于生产更改,我们仅从CI服务器运行terraform,以尝试缓解此问题。到目前为止,它已经工作。

我认为您可以在
main.tf
中定义远程状态,无需通过命令行指定。见:

terraform {
  backend "s3" {
    bucket         = "<s3-bucket>"
    key            = "<state-name>"
    region         = "<aws-region>"
    encrypt        = true
  }
}
地形{
后端“s3”{
bucket=“”
key=“”
region=“”
加密=真
}
}

我强烈建议您看看terragrunt

使用此工具,您可以定义像terraform.tfvars这样的文件,该文件包含有关远程状态、锁表等的所有信息,而无需运行额外的命令。这将为您透明地处理它

Terragrunt是imo正确运行Terraform的基本要求