Terraform多提供商问题

Terraform多提供商问题,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,我遵循运行Terraform v0.14.10-> 我的配置如下: 变量.tf terraform { backend "remote" { organization = "the-xxxx" workspaces { prefix = "non-prod-" } } required_providers { aws = { source = "hashico

我遵循运行Terraform v0.14.10->

我的配置如下:

变量.tf

terraform {
  backend "remote" {
    organization = "the-xxxx"
    workspaces {
      prefix = "non-prod-"
    }
  }
  required_providers {
    aws = {
      source = "hashicorp/aws"
      version = "3.32.0"
    }
  }
}

provider "aws" {
}

provider "aws" {
  alias  = "core_db_middleware"
  profile = "core_db_middleware"
}

provider "aws" {
  alias = "us-east-1"
  region = "us-east-1"
}
在main.tf中,我调用我的模块:

module "vpc" {
  source = "../modules/infrastructure/shared/aws/vpc"

  providers = {
    aws.core_db_middleware = aws.core_db_middleware
  }

  class_b_block = var.class_b_block
  platform_name = var.platform_name
  core_platform_aws_account_id = var.core_platform_aws_account_id
  core_platform_vpc_id = var.core_platform_vpc_id
  core_platform_region = var.core_platform_region
  core_platform_cidr_range = var.core_platform_cidr_range
}
然后在“vpc”模块variables.tf中,我有:

provider "aws" {}
provider "aws" {
  alias = "core_db_middleware"
}

data "aws_caller_identity" "requester" {
  provider = aws.core_db_middleware
}

data "aws_region" "requester" {
  provider = aws.core_db_middleware
}
当我在terraform上运行plan时,它会不断给我默认提供商的aws帐户ID,即使我有:

data "aws_caller_identity" "requester" {
  provider = aws.core_db_middleware
}
并像这样使用它:

resource "aws_vpc_peering_connection" "core_db_middleware_requester" {
  peer_owner_id = data.aws_caller_identity.requester.account_id
  peer_vpc_id = "vpc-xxxxxxxxxxxxxx"
  vpc_id = aws_vpc.main.id
  peer_region = data.aws_region.requester.name
  auto_accept = false
  tags = {
    Name = "VPC Peering between ${var.platform_name} and core_db_middleware"
  }
}
我尝试将
configuration\u alias=[aws.core\u db\u middleware]
添加到我的根目录中的my main.tf,如官方文档和“vpc”模块目录中所述,但在我的根目录中出现以下错误:

Error: Invalid required_providers object
  on variables.tf line 9, in terraform:
   9:     aws = {
  10:       source = "hashicorp/aws"
  11:       version = "3.32.0"
  12:       configuration_aliases = [ aws.core_db_middleware ]
  13:     }
required_providers objects can only contain "version" and "source" attributes.
To configure a provider, use a "provider" block.
Error: Variables not allowed
  on variables.tf line 12, in terraform:
  12:       configuration_aliases = [ aws.core_db_middleware ]
Variables may not be used here.
当我将其放入“vpc”模块时出现以下错误:

我不知道哪里出了问题:(我也在管道环境中设置了默认的提供程序aws环境变量,例如

AWS_ACCESS_KEY_ID: $xxxxxxxxxxx_AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY: $xxxxxxxxxx_AWS_SECRET_ACCESS_KEY
AWS_DEFAULT_REGION: 'ap-southeast-2' 

是否有理由不将其用作VPC模块中的默认AWS提供程序?即
AWS=AWS.core\u db\u middleware
而不是
AWS.core\u db\u middleware=AWS.core\u db\u middleware
?此
configuration\u Alias
参数在Terraform v0.15.0中是新的。如果您能够升级到新版本,那么您应该是一名用户无法按照这些说明添加新参数。@yvesonline我想在terraform模块中使用两个提供程序。一个默认提供程序和一个附加提供程序。您的建议只会覆盖默认提供程序。Martin我将尝试升级,看看我如何将terraform更新到0.15.1,但仍有问题。我已创建了一个新帖子()以文档后面的示例为例。我相信我需要对其进行排序,然后才能解决上述问题。
AWS_ACCESS_KEY_ID: $xxxxxxxxxxx_AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY: $xxxxxxxxxx_AWS_SECRET_ACCESS_KEY
AWS_DEFAULT_REGION: 'ap-southeast-2'