【问题标题】:Terraform - deploying in multiple accountsTerraform - 在多个帐户中部署
【发布时间】:2019-04-05 18:06:47
【问题描述】:

我目前在一个组织内使用多个 AWS 账户。我有多个具有承担角色的提供商设置。

有没有办法让资源通过所有提供程序滚动,以确保安装了我在 Terraform 模块中定义的所有内容?我试图避免每个提供者都有一个资源,而只有一个资源可以使用每个提供者。

希望有人可以帮助解决这个问题或有这样的用例。

TIA

【问题讨论】:

  • 从你的问题来看,我认为这里的答案是否定的,但如果你可以分享一个minimal reproducible example 你目前拥有的东西以及你想做什么,那么有人可能会提出一种更好的结构方式。

标签: terraform


【解决方案1】:

不,不可能只有一个资源块使用多个提供程序。最好的方法是为组织中的不同帐户设置不同的文件夹。每个文件夹的 main.tf 具有相同的资源块/s(如您的情况)和不同的 provider.tf。在您的 main 中,您可以调用所需的模块。

对于您的情况,它可能看起来有很多冗余代码,但这是最好的选择。请参考下面的项目结构来了解一下。

|   Project Directory
|   
+---dev
|   |   main.tf
|   |   param.tfvars
|   |   provider.tf
|   |   terraform.tfstate
|   |   terraform.tfstate.backup
|   |   variables.tf
|   |   
+---modules
|   +---internetgateway
|   |       main.tf
|   |       outputs.tf
|   |       variables.tf
|   |       
|   +---nat
|   |       main.tf
|   |       outputs.tf
|   |       variables.tf
|   |       
+---prod
|   |   main.tf
|   |   param.tfvars
|   |   provider.tf
|   |   terraform.tfstate
|   |   terraform.tfstate.backup
|   |   variables.tf
|   |
+---test
|   |   main.tf
|   |   param.tfvars
|   |   provider.tf
|   |   terraform.tfstate
|   |   terraform.tfstate.backup
|   |   variables.tf    

【讨论】:

  • 如果您使用tree 之类的东西而不是屏幕截图来共享您的目录布局会更有用。
  • 有一个名为tree 的实用程序可以根据您的目录结构为您执行此操作。否则我需要在本地创建你的目录结构,然后运行tree
  • @ShivRajawat 所以你没有为每个模块创建一个模块?每个子文件夹都有一个 TFstate 吗?你能再解释一下吗?我已经开始根据你上面的树做这项工作,但我在一个 TFstate 中管理所有内容,想知道你是否出于特定原因按照你的方式进行操作。
  • 由于每个环境(dev、pre-prod、prod 等)都有不同的配置,建议为每个环境使用单独的状态文件,以便您可以轻松地执行应用/销毁在不影响他人的特定环境下。虽然不建议在本地存储状态(就像我一样),但最好使用单个后端(例如 S3)并为每个环境使用单独的文件。
  • 使用模块获取资源并在模块内使用“计数”。从具有适当计数值的每个环境/子文件夹中调用它们,这将根据不同环境的要求而有所不同。
猜你喜欢
  • 2020-08-11
  • 2019-04-28
  • 2019-01-13
  • 1970-01-01
  • 2019-04-12
  • 1970-01-01
  • 2021-01-15
  • 2021-09-06
  • 2022-09-27
相关资源
最近更新 更多