如何在 terraform 中为多个 aws 提供商设置默认帐户?

如何在 terraform 中为多个 aws 提供商设置默认帐户?

我需要在 Terraform 代码中为多个账户创建资源。因此,我在 aws 中创建了多个提供程序,并将其用于各个模块。除上述内容外,如果我创建任何资源,我希望使用其中一个账户作为默认账户。

我尝试了下面的代码,但没有起作用。

provider "aws" {
  alias  = "silver"
  region = "us-east-2"
  profile = var.profile
}

provider "aws" {
  alias  = "gold"
  region = "us-east-2"
  profile = "gold"
}
provider "aws" {
  alias  = "plt"
  region = "us-east-2"
  profile = "plt"
}
provider "aws" {
  alias  = "infra"
  region = "us-east-2"
  profile = "infra"
}
provider "aws" {
  alias  = "sandbox"
  region = "us-east-2"
  profile = "sandbox"
  default = true
}

即使我尝试了以下设置但出现语法错误。

providers = { 
aws.infra = "aws.infra" 
aws.sandbox = "aws.sandbox" 
aws.plt = "aws.plt"
aws.gold = "aws.gold"
default = "aws.sandbox" 
 }

我也尝试了下面的代码,但出现了语法错误。

providers = { 
aws = aws.sandbox 
 }

以下是错误

╷ │ 错误:不支持的参数 │ │ 在 c1-versions.tf 第 52 行:│
52:providers = { │ │ 这里不需要名为“providers”的参数。

答案1

给定提供程序的默认配置仅写为提供程序的本地名称,没有任何别名部分。

例如,如果您希望子模块aws.sandbox将根模块作为其命名提供程序的默认配置aws,那么您可以这样写:

providers = {
  aws = aws.sandbox
}

上述代码告诉 Terraform,子模块内提供程序的默认配置与调用模块中名为“sandbox”的配置相同。每个模块都有自己的一组提供程序配置标识符,因此您可以使用父模块中提供程序配置的任意组合来填充子模块所需的提供程序配置地址。

相关内容