terraform - 在 Terraform 中,有没有办法为模块使用不同的提供程序?

标签 terraform terraform-provider-aws

我使用https://github.com/cloudposse/terraform-aws-acm-request-certificate使用 terraform 和 aws 生成证书。

有没有办法为模块使用不同的提供程序?

我的意思是在第一个模块中我想在 us-east-1 区域中执行此操作,而另一个模块中我想在 us-east-2 中执行此操作。

但是由于我有一个提供程序,这可能与单个文件或单个目录中的 terraform 相关吗?

provider "aws" {
  version = "~> 2.12.0"
  profile = "..."
  region  = "us-east-1"
}

module "example_com" {
  # Should be in us-east-1
  source                            = "git::https://github.com/cloudposse/terraform-aws-acm-request-certificate.git?ref=master"
  domain_name                       = "example.com"
  process_domain_validation_options = false
  ttl                               = "300"
  subject_alternative_names         = ["*.example.com"]
}

module "cdn_example_com" {

  # Should be in us-east-2
  source                            = "git::https://github.com/cloudposse/terraform-aws-acm-request-certificate.git?ref=master"
  domain_name                       = "cdn.example.com"
  process_domain_validation_options = false
  ttl                               = "300"
}

类似于:

provider "aws" "aws-east-1" {
  version = "~> 2.12.0"
  profile = "..."
  region  = "us-east-1"
}

provider "aws" "aws-east-2" {
  version = "~> 2.12.0"
  profile = "..."
  region  = "us-east-2"
}

module "example_com" {
  provider = "aws-east-1"

  source                            = "git::https://github.com/cloudposse/terraform-aws-acm-request-certificate.git?ref=master"
  domain_name                       = "example.com"
  process_domain_validation_options = false
  ttl                               = "300"
  subject_alternative_names         = ["*.example.com"]
}

module "cdn_example_com" {

  provider = "aws-east-2"

  # Should be in us-east-2
  source                            = "git::https://github.com/cloudposse/terraform-aws-acm-request-certificate.git?ref=master"
  domain_name                       = "cdn.example.com"
  process_domain_validation_options = false
  ttl                               = "300"
}

最佳答案

基于terraform documation您可以创建不同的提供程序并将它们“传递”给模块。

就您而言,可能如下:

provider "aws" {
  version = "~> 2.12.0"
  profile = "..."
  region  = "us-east-1"
}


# create second provider with alias of "us-east-2" 
provider "aws" {
  version = "~> 2.12.0"
  profile = "..."
  region  = "us-east-2"
  alias   = "us-east-2" 
}

#
# Then for your modules
#

# use default provider
module "example_com" {

  source                            = "git::https://github.com/cloudposse/terraform-aws-acm-request-certificate.git?ref=master"
  domain_name                       = "example.com"
  process_domain_validation_options = false
  ttl                               = "300"
  subject_alternative_names         = ["*.example.com"]
}


# use non-default provider
module "cdn_example_com" {

   providers = {
    aws = aws.us-east-2
  }

  # Should be in us-east-2
  source                            = "git::https://github.com/cloudposse/terraform-aws-acm-request-certificate.git?ref=master"
  domain_name                       = "cdn.example.com"
  process_domain_validation_options = false
  ttl                               = "300"
}

关于terraform - 在 Terraform 中,有没有办法为模块使用不同的提供程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63975913/

相关文章:

amazon-web-services - AWS ElastiCache 集群和 AWS ElastiCache 复制组有什么区别?

amazon-ec2 - Terraform - 从 aws 实例资源输出实例 ID - 一次一个

amazon-web-services - 无法生成 id 和 arn

amazon-web-services - 从远程状态重建/重新创建地形

deployment - AWS CDK 是否提供部署 ECS 应用程序的构造?

terraform - 需要对 Terraform 资源进行多次计数?

json - 如何在 Terraform 模板文件中将字符串转换为数字

azure - Terraform 无法列出提供商注册状态

terraform - 特定 terraform 提供商的 terraform 文档中的资源和数据源有什么区别?

Azure 地形 : Inserting "certificate-authority" data into Kube context during cluster creation