Terraform v0.10.7模塊的Terraform遠程狀態配置
我正在爲我們的DevOps團隊將terraform模塊放在一起。我們正在使用的每個組件都會有單獨的模塊,並會根據不同的環境和要求使用這些模塊創建整個堆棧。
的目錄層次結構如下所示:
Terraform
- modules
- module-1 (main.tf, vars.tf, outputs.tf, backend.tf)
- module-2 (main.tf, vars.tf, outputs.tf, backend.tf)
- module-3 (main.tf, vars.tf, outputs.tf, backend.tf)
...
- environments
- qa (main.tf, vars.tf, outputs.tf, bakend.tf)
- stage (main.tf, vars.tf, outputs.tf, bakend.tf)
- prod (main.tf, vars.tf, outputs.tf, bakend.tf)
在backend.tf我指定後端爲S3和一個完整的層次結構/resources/mod-1/terraform.tfstate
。同樣的事情適用於環境中的backend.tf。
當我爲任何環境提供terraform get
和terraform apply
時,它將獲取指定的所有模塊,並將更改應用於AWS基礎架構,並將在S3中的指定位置存儲該env的terraform.tfstate。
所以問題是,將terraform.tfstate環境中使用的所有模塊也將生成並推送到S3(單一適用於env)? 我還沒有跑terraform apply
到任何模塊。
正如我必須使用一些數據來自S3,並在同一時間這些模塊的terraform.tfstate要避免給多個適用於這些模塊和環境給予單terraform apply
的計劃。這怎麼能實現?
感謝您的詳細解答!但是如果沒有main.tf,env會運行什麼?任何env的'main.tf'文件都將包含所有具有源代碼的模塊。因此,對於envs來說''main.tf'只會包含模塊列表(不同於模塊的其他'main.tf')。 是的,我正在使用AWS,我希望S3作爲後端。但是Terraform中存在的錯誤不允許將S3配置爲後端,在'terraform init'期間,它表示「InvalidClientTokenId」,儘管它是root用戶。 –
請確保您正確設置AWS API密鑰(https://www.terraform.io/docs/providers/aws/) – BMW
嚴重地先生?您如何認爲我沒有正確設置AWS API密鑰就達到了目標?有關未解決的問題,請參閱Terraform Git。如果有任何問題,我會請求解決。 (https:// github。com/terraform-providers/terraform-provider-aws/issues/663#issuecomment-334495683) –