Назад | Перейти на главную страницу

Ресурс aws_acm_certificate не имеет атрибута domain_validation_options.0.resource_record_value

Я пытаюсь создать набор проверочных записей для своих сертификатов 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» и автоматического перебора списка имен хостов.

https://www.terraform.io/docs/providers/aws/r/acm_certificate_validation.html#dns-validation-with-route-53

Примечания к отладке:

$ ../terraform -v
Terraform v0.11.14
+ provider.aws v2.19.0
+ provider.postgresql v1.1.0

Просто коснитесь той же проблемы и не думайте, что есть решение:

  1. Вы создаете вложенный список, когда добавляете счетчик. element и т. д. не может обрабатывать эти вложенные переменные, насколько я могу судить.
  2. Я переместил свой в модуль, но попал в недостающий count для модулей.

Моим окончательным решением было создание модуля, который выполняет все вышеизложенное. Затем вызовите его несколько раз. Не идеально, но чисто.