Terraform:如何确保我在预期的AWS账户上运行terraform

use*_*955 3 amazon-web-services terraform

假设我想在我的开发帐户中启动EC2实例,但我可能会意外地运行错误的命令并创建prod帐户的临时凭证而不是开发帐户,然后当我Terraform申请时,我将在prod帐户启动EC2 ?

我怎样才能避免这种情况发生?我可以在此文件夹中创建具有开发帐户ID的文本文件,然后在启动EC2之前让Terraform将我的临时凭证的帐户ID与此文件中的帐户ID进行比较,也许在null_resource中?我无法弄清楚如何实现它.

yda*_*coR 5

AWS提供程序允许您指定可以定义的列表allowed_account_ids或列表,forbidden_account_ids以防止在必要时发生这种情况.

所以你可能有一个看起来像这样的文件夹结构:

$ tree -a
.
??? dev
?   ??? bar-app
?   ?   ??? dev-eu-west-1.tf -> ../../providers/dev-eu-west-1.tf
?   ?   ??? main.tf
?   ??? foo-app
?   ?   ??? dev-eu-west-1.tf -> ../../providers/dev-eu-west-1.tf
?   ?   ??? main.tf
?   ??? vpc
?       ??? dev-eu-west-1.tf -> ../../providers/dev-eu-west-1.tf
?       ??? main.tf
??? prod
?   ??? bar-app
?   ?   ??? main.tf
?   ?   ??? prod-eu-west-1.tf -> ../../providers/prod-eu-west-1.tf
?   ??? foo-app
?   ?   ??? main.tf
?   ?   ??? prod-eu-west-1.tf -> ../../providers/prod-eu-west-1.tf
?   ??? vpc
?       ??? main.tf
?       ??? prod-eu-west-1.tf -> ../../providers/prod-eu-west-1.tf
??? providers
?   ??? dev-eu-west-1.tf
?   ??? prod-eu-west-1.tf
?   ??? test-eu-west-1.tf
??? test
    ??? bar-app
    ?   ??? main.tf
    ?   ??? test-eu-west-1.tf -> ../../providers/test-eu-west-1.tf
    ??? foo-app
    ?   ??? main.tf
    ?   ??? test-eu-west-1.tf -> ../../providers/test-eu-west-1.tf
    ??? vpc
        ??? main.tf
        ??? test-eu-west-1.tf -> ../../providers/test-eu-west-1.tf
Run Code Online (Sandbox Code Playgroud)

当你的providers/dev-eu-west-1.tf文件看起来像:

provider "aws" {
  region              = "eu-west-1"
  allowed_account_ids = [
    "1234567890",
  ]
}
Run Code Online (Sandbox Code Playgroud)

你的providers/test-eu-west-1.tf文件看起来像:

provider "aws" {
  region              = "eu-west-1"
  allowed_account_ids = [
    "5678901234",
  ]
}
Run Code Online (Sandbox Code Playgroud)

这意味着您只能dev/foo-app在使用属于该1234567890帐户的凭据时运行Terraform,并且只能dev/foo-app在使用属于该5678901234帐户的凭据时运行Terraform .