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) –