Как запустить несколько модулей в одном файле в terraform?

Я использую https://github.com/cloudposse/terraform-aws-acm-request-certificate для создания сертификата с использованием terraform и aws.

Как запустить несколько доменов в одном файле в терраформе? (не субдомен)

Я пробую это, но у меня ошибка Error: Duplicate module call:

module "acm_request_certificate" {
  source                            = "git::https://github.com/cloudposse/terraform-aws-acm-request-certificate.git?ref=master"
  domain_name                       = "example.com"
  process_domain_validation_options = true
  ttl                               = "300"
}

module "acm_request_certificate" {
  source                            = "git::https://github.com/cloudposse/terraform-aws-acm-request-certificate.git?ref=master"
  domain_name                       = "otherexample.com"
  process_domain_validation_options = true
  ttl                               = "300"
}

Я ищу решение вроде:

const domains = ["example.com", "otherexample.com"]

foreach(domain of domains) {
 module "acm_request_certificate" {
  source                            = "git::https://github.com/cloudposse/terraform-aws-acm-request-certificate.git?ref=master"
  domain_name                       = domain
  process_domain_validation_options = true
  ttl                               = "300"
 }
}

1 ответ

Решение

Прежде всего, вы используете одно и то же имя для обоих модулей. Они должны быть разными, например:

       module "acm_request_certificate_example" {
  source                            = "git::https://github.com/cloudposse/terraform-aws-acm-request-certificate.git?ref=master"
  domain_name                       = "otherexample.com"
  process_domain_validation_options = true
  ttl                               = "300"
}

module "acm_request_certificate_other_example" {
  source                            = "git::https://github.com/cloudposse/terraform-aws-acm-request-certificate.git?ref=master"
  domain_name                       = "otherexample.com"
  process_domain_validation_options = true
  ttl                               = "300"
}

Кроме того, в terraform 0.13 вы можете использовать foreach для модулей.

       # my_buckets.tf
module "bucket" {
  for_each = toset(["assets", "media"])
  source   = "./publish_bucket"
  name     = "${each.key}_bucket"
}

См. Подробности в примечаниях к выпуску.

Другие вопросы по тегам