Terraform: несколько сертификатов ACM - PullRequest
1 голос
/ 17 апреля 2020

Я пытаюсь написать некоторую TF, которая, учитывая одно полное доменное имя для сайта, сгенерирует сертификат ACM, создаст записи R53 для проверки и выполнит проверку за один проход TF.

I Я не использую субдомены, и у меня это работает для одного FQDN, но, как и в случае с TF, я хочу иметь возможность добавить еще одно FQDN к переменной в будущем, чтобы иметь несколько сертификатов.

Когда я запускаю приведенный ниже код, я получаю сообщение об ошибке:

Error: Error running plan: 1 error occurred:
    * aws_acm_certificate_validation.cert: 2 errors occurred:
    * aws_acm_certificate_validation.cert[0]: Resource 'aws_route53_record.cert_validation' does not have attribute 'fqdn' for variable 'aws_route53_record.cert_validation.*.fqdn'
    * aws_acm_certificate_validation.cert[1]: Resource 'aws_route53_record.cert_validation' does not have attribute 'fqdn' for variable 'aws_route53_record.cert_validation.*.fqdn'

Но я знаю, что запись R53 экспортирует атрибут fqdn.

acm.tf:

resource "aws_acm_certificate" "cert" {
  count = "${length(var.certificate_fqdns)}"
  domain_name               = "${element(var.certificate_fqdns, count.index)}"
  validation_method         = "DNS"

  tags = "${local.all_tags}"

  lifecycle {
    create_before_destroy = true
  }
}

resource "aws_route53_record" "cert_validation" {
    count = "${length(var.certificate_fqdns)}"

    name = "${lookup(local.domain_validation_options[count.index], "resource_record_name")}"
    type = "${lookup(local.domain_validation_options[count.index], "resource_record_type")}"
    zone_id = "${data.aws_route53_zone.cert_fqdn_zone.*.id}"
    records = ["${lookup(local.domain_validation_options[count.index], "resource_record_value")}"]
    ttl = 60
}
resource "aws_acm_certificate_validation" "cert" {
  count                   = "${length(var.certificate_fqdns)}"
  certificate_arn         = "${element(aws_acm_certificate.cert.*.arn, count.index)}"
  validation_record_fqdns = ["${aws_route53_record.cert_validation.*.fqdn}"]
}

variables.tf:

    variable "certificate_fqdns" { 
      description = "The FQDNs to be used to create ACM certificates."
      type        = "list"
      default     = []
    }

    locals {
      domain_validation_options = "${flatten(aws_acm_certificate.cert.*.domain_validation_options)}"
    }

data "aws_route53_zone" "cert_fqdn_zone" {
  name = "${element(var.certificate_fqdns, count.index)}"
}

, и мой файл vars содержит следующую запись:

"certificate_fqdns": [
    "example.com"
]

РЕДАКТИРОВАТЬ: добавлен поиск данных для зон Route53 , который, кажется, только возвращает зону для первого домена, указанного в переменной, даже когда существует несколько разных доменов. т.е. example1.com и example2.com будут использовать один и тот же идентификатор зоны для обоих наборов записей R53, что, очевидно, приведет к ошибке

...