2017-10-05 55 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