Я пытаюсь написать некоторую 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, что, очевидно, приведет к ошибке