我自己管理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检出代码,他是否需要再次运行上述命令?
答案 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的基本要求。