В Terraform есть ли способ использовать другого поставщика для модуля?

#terraform #terraform-provider-aws

#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"
}
  

Ответ №1:

На основе документации terraform вы можете создавать разных поставщиков и «передавать» их модулям.

В вашем случае это может быть следующим:

 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"
}
  

Ответ №2:

Приведенная ниже ссылка может пригодиться для решения вашей цели

Мультирегиональная терраформация