每个基础架构和应用程序都有一个单独的状态文件是有意义的。
是否有任何现有的工具(内置或不是)来帮助?有点像terraform状态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
当你想将应用程序部署到测试或UAT您只需通过提供路径到非督促S3状态调用terraform init
在你的基础设施项目terraform apply
之前。然后通过提供TEST或UAT路径的路径,在您的应用程序terraform config上调用terraform init
。
理想情况下,你可以创建自己的shell脚本来提供和部署应用程序。然后,在您最喜欢的配置项中,您可以创建一条管道来调配基础架构并根据需要部署应用请确保您参数这些脚本,所以你可以通过你想要的环境,提供或应用程式哪个要部署,例如:
./my-shared-infrastructure/provision-infrastructure.sh nonprod
./my-app-1/deploy-application.sh uat v1.0
我有兴趣的工具,如果有is.I倾向于使用terraform rm和terraform导入到另一个状态文件。或者复制状态文件并放弃你不需要的东西。取决于你在这里管理多少资源 –
d1ll1nger
嗯,我认为这对脚本没有什么不好,我们会'使状态列表变为',然后用'rm' +'import'循环... – munchybunch
不错,但我想这个问题是无法导入的资源,例如路由表中的单个路由(上次我检查过的时候无法进行) – d1ll1nger