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

问题描述 投票:3回答:4

我自己一直在管理我们的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
4个回答
0
投票

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

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

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


0
投票

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

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


0
投票

我想你可以在main.tf中定义远程状态,不需要通过命令行指定。看到:

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

0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.