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

时间:2018-03-02 04:05:42

标签: terraform

我自己管理Terraform代码几个月了。既然团队中还有其他团队成员,我希望他们学习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检出代码,他是否需要再次运行上述命令?

4 个答案:

答案 0 :(得分:0)

是的,你们都需要确保你正确配置状态,以便没有人在没有从S3拉动和推动状态的情况下意外地进行更改。

您还应该考虑使用状态锁定(将DynamoDB用于S3状态后端),这样您就不会有多个人同时尝试更改相同的资源,这可能会破坏您的状态文件。

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

答案 1 :(得分:0)

我们的一条规则是,如果你在非生产系统中破坏状态文件,你就会遇到问题以及修复它们的乐趣。对此的一种体验使人们非常渴望避免重复体验;)

对于生产变更,我们只从CI服务器运行terraform以尝试缓解此问题。到目前为止它已经奏效了。

答案 2 :(得分:0)

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

terraform {
  backend "s3" {
    bucket         = "<s3-bucket>"
    key            = "<state-name>"
    region         = "<aws-region>"
    encrypt        = true
  }
}

答案 3 :(得分:0)

我强烈建议您看看terragrunt。 https://blog.oauth.io/introduction-oauth2-flow-diagrams/

使用此工具,您可以定义一个文件,例如terraform.tfvars,该文件具有有关远程状态,锁表等的所有信息,而无需运行其他命令。这将为您透明地处理它。

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