Terraform - 在多个帐户中部署

hhh*_*505 3 terraform

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

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

希望有人可以对此提供帮助或有这样的用例。

TIA

Shi*_*wat 5

不,不可能只有一个资源块使用多个提供程序。最好的方法是为组织中的不同帐户设置不同的文件夹。每个文件夹的 main.tf 具有相同的资源块(如您的情况)和不同的 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    
Run Code Online (Sandbox Code Playgroud)

  • 由于每个环境(dev、pre-prod、prod 等)都有不同的配置,建议为每个环境使用单独的状态文件,以便您可以轻松地对特定环境执行应用/销毁,而不会影响其他环境。尽管不建议在本地存储状态(就像我所做的那样),但最好使用单个后端(例如 S3)并为每个环境设置单独的文件。 (2认同)