terraform aws 提供程序:在子模块中添加默认标签

Oli*_*ver 6 terraform terraform-provider-aws

default_tags在根模块中使用 terraform aws 提供程序块my_terraform。该模块有一个名为 的子模块my_submodule,我想在该子模块中添加其他默认标签。我在以下位置尝试过my_terraform/my_submodule/main.tf

\n
provider "aws" {\n  default_tags {\n    tags = {\n      "extra_tag" = "something"\n    }\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

但我收到这个错误:

\n
$ terraform init\nInitializing modules...\n- my_terraform.my_submodule in my_terraform/my_submodule\nThere are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that\nTerraform can determine which modules and providers need to be installed.\n\xe2\x95\xb7\n\xe2\x94\x82 Error: Module module.my_submodule contains provider configuration\n\xe2\x94\x82 \n\xe2\x94\x82 Providers cannot be configured within modules using count, for_each or depends_on.\n
Run Code Online (Sandbox Code Playgroud)\n

有没有办法解决?

\n

N1n*_*ngu 4

解决方法是为每个所需的标签集创建不同的别名提供程序块,并将其显式传递给每个子模块。

provider "aws" {
  default_tags {
    tags = {
      default_tag = "asdf"
    }
  }
}
provider "aws" {
  alias  = "foo"
  default_tags {
    tags = {
      default_tag = "asdf"
      extra_tag   = "foo"
    }
  }
}
provider "aws" {
  alias  = "bar"
  default_tags {
    tags = {
      default_tag = "asdf"
      extra_tag   = "bar"
    }
  }
}

module "foo" {
  source = "something"
  providers = {
    aws = aws.foo
  }
}
module "bar" {
  source = "something"
  providers = {
    aws = aws.bar
  }
}
Run Code Online (Sandbox Code Playgroud)