2017-10-05 102 views
1

我们从一个tfstate文件开始,随着时间的推移它的增长相当多。现在拆分terraform 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之间?

+1

我有兴趣的工具,如果有is.I倾向于使用terraform rm 和terraform导入到另一个状态文件。或者复制状态文件并放弃你不需要的东西。取决于你在这里管理多少资源 – d1ll1nger

+0

嗯,我认为这对脚本没有什么不好,我们会'使状态列表变为',然后用'rm' +'import'循环... – munchybunch

+0

不错,但我想这个问题是无法导入的资源,例如路由表中的单个路由(上次我检查过的时候无法进行) – d1ll1nger

回答

1

每个基础架构和应用程序都有一个单独的状态文件是有意义的。

是否有任何现有的工具(内置或不是)来帮助?有点像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