【问题标题】:Multiple developers and Terraform state files多个开发人员和 Terraform 状态文件
【发布时间】:2018-09-07 10:49:00
【问题描述】:

几个月来,我一直在自己管理我们的 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 上查看代码,是否需要再次运行上述命令?

【问题讨论】:

    标签: terraform


    【解决方案1】:

    我们的一条规则是,如果您破坏了非生产系统中的状态文件,您将拥有问题并享受修复它们的乐趣。这种体验使人们非常热衷于避免重复体验;)

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

    【讨论】:

      【解决方案2】:

      是的,你们都需要确保正确配置状态,这样没有人会在没有从 S3 拉取和推送状态的情况下意外进行更改。

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

          我强烈建议您看看 terragrunt。 https://github.com/gruntwork-io/terragrunt

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

          Terragrunt 几乎是 imo 正确运行 Terraform 的必要条件。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-11-25
            • 1970-01-01
            • 1970-01-01
            • 2022-06-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多