我们从一个 tfstate 文件开始,随着时间的推移它增长了很多。
现在,计划真的很慢,我现在想分成几个 tfstate 文件(一个用于我们的开发环境,一个用于通用共享基础设施,一个用于每个生产环境)。
就像在https://charity.wtf/2016/03/30/terraform-vpc-and-why-you-want-a-tfstate-file-per-env/和Terraform Multiple State Files Best Practice Examples 中的描述一样。
是否有任何现有工具(内置或非内置)可以帮助解决此问题?terraform state mv有点像,但在 tfstates 之间?
terraform state mv有-state-out标志,您可以在其中定义另一个状态以将资源移至其中。
但是,我无法让它与 0.11.14 版本一起工作,因此我手动从需要移动到另一个状态的状态文件中剪切和粘贴模块,效果非常好。
编辑:这是一个解决方法,基本上dwonloads两个状态文件,移动所需的状态,然后将它们重新上传到S3存储桶: https: //github.com/hashicorp/terraform/pull/15652#issuecomment-410754814
为基础设施和应用程序分别拥有一个单独的状态文件是有意义的。
是否有任何现有工具(内置或非内置)可以帮助解决此问题?有点像 terraform state mv 但在 tfstates 之间?
不,据我所知。将共享部分(例如 ECS 集群、ALB、网络配置、iam 角色等)移出到单独的项目/存储库中。
使用 S3 作为状态后端时,您可以为基础设施和应用程序状态定义不同的路径,例如:
/infrastructure/nonprod/terraform.tfstate/infrastructure/prod/terraform.tfstate/apps/app1/test/terraform.tfstate/apps/app1/uat/terraform.tfstate/apps/app1/prod/terraform.tfstate当您想要将应用程序部署到 TEST 或 UAT 时,您只需在基础设施项目中调用terraform initbeforeterraform apply即可提供非产品 S3 状态的路径。然后terraform init通过提供 TEST 或 UAT 路径的路径来调用应用程序 terraform 配置。
理想情况下,您可以创建自己的 shell 脚本来配置和部署您的应用程序。然后,在您最喜欢的 CI 中,您可以创建一个管道来配置基础设施并根据需要部署应用程序。确保对这些脚本进行参数化,以便可以传递要配置的环境或要部署的应用程序,例如:
./my-shared-infrastructure/provision-infrastructure.sh nonprod
./my-app-1/deploy-application.sh uat v1.0
| 归档时间: |
|
| 查看次数: |
4553 次 |
| 最近记录: |