Я пытаюсь создать набор проверочных записей для своих сертификатов ACM с помощью Terraform, и у меня возникает странная проблема.
resource "aws_acm_certificate" "cert" {
domain_name = "${element(var.domains, count.index)}"
count = "${length(var.domains)}"
validation_method = "DNS"
lifecycle {
create_before_destroy = true
}
}
resource "aws_route53_record" "cert-record" {
name = "${element(aws_acm_certificate.cert.*.domain_validation_options.0.resource_record_name, count.index)}"
type = "${element(aws_acm_certificate.cert.*.domain_validation_options.0.resource_record_type, count.index)}"
zone_id = "${var.zone-id}"
count = "${length(var.domains)}"
ttl = 30
records = [
"${element(aws_acm_certificate.cert.*.domain_validation_options.0.resource_record_value, count.index)}"
]
depends_on = [
"aws_acm_certificate.cert"
]
}
resource "aws_acm_certificate_validation" "cert-valid" {
certificate_arn = "${element(aws_acm_certificate.cert.*.arn, count.index)}"
count = "${length(var.domains)}"
validation_record_fqdns = [
"${element(aws_route53_record.cert-record.*.fqdn, count.index)}"
]
depends_on = [
"aws_route53_record.cert-record"
]
}
Всякий раз, когда я запускаю это, я получаю следующий набор ошибок:
Error: Error running plan: 1 error occurred:
* module.swarm.module.certs.aws_route53_record.cert-record: 5 errors occurred:
* module.swarm.module.certs.aws_route53_record.cert-record[0]: Resource 'aws_acm_certificate.cert' does not have attribute 'domain_validation_options.0.resource_record_type' for variable 'aws_acm_certificate.cert.*.domain_validation_options.0.resource_record_type'
* module.swarm.module.certs.aws_route53_record.cert-record[4]: Resource 'aws_acm_certificate.cert' does not have attribute 'domain_validation_options.0.resource_record_value' for variable 'aws_acm_certificate.cert.*.domain_validation_options.0.resource_record_value'
* module.swarm.module.certs.aws_route53_record.cert-record[3]: Resource 'aws_acm_certificate.cert' does not have attribute 'domain_validation_options.0.resource_record_name' for variable 'aws_acm_certificate.cert.*.domain_validation_options.0.resource_record_name'
* module.swarm.module.certs.aws_route53_record.cert-record[2]: Resource 'aws_acm_certificate.cert' does not have attribute 'domain_validation_options.0.resource_record_type' for variable 'aws_acm_certificate.cert.*.domain_validation_options.0.resource_record_type'
* module.swarm.module.certs.aws_route53_record.cert-record[1]: Resource 'aws_acm_certificate.cert' does not have attribute 'domain_validation_options.0.resource_record_value' for variable 'aws_acm_certificate.cert.*.domain_validation_options.0.resource_record_value'
Что странно, так это то, что это почти точная копия примера из документации, только модифицированная для использования атрибута «count» и автоматического перебора списка имен хостов.
Примечания к отладке:
$ ../terraform -v
Terraform v0.11.14
+ provider.aws v2.19.0
+ provider.postgresql v1.1.0
Просто коснитесь той же проблемы и не думайте, что есть решение:
count
для модулей.Моим окончательным решением было создание модуля, который выполняет все вышеизложенное. Затем вызовите его несколько раз. Не идеально, но чисто.