Кажется, я исправил проблему, добавив записи проверки сертификатов в корневой домен, а не в поддомен.Следовательно, нарушение циклической зависимости.
Проблема заключается в том, что поддомен не может быть создан без сертификата, а сертификат не может быть проверен без поддомена.Так что ситуация застряла и неразрешима.
Вы можете вручную создать поддомен, но тогда какой смысл в автоматизации, если вам приходится прилагать усилия вручную для решения проблем.
Поэтому я попытался добавить записи проверки сертификата в корневой каталог.Внезапно он начинает работать, потому что корневой домен - это то, что создается снаружи для проекта.Этакий глобальный инфраструктурный проект, который может быть реализован извне.Тогда ваши отдельные проекты могут зависать от этой инфраструктуры в каждом конкретном случае.
Вот конфигурация terraform, которая сработала:
data "aws_route53_zone" "root_domain" {
name = "${var.route53_root_domain_name}"
private_zone = false
}
# The domain name to use with api-gateway
resource "aws_api_gateway_domain_name" "domain_name" {
domain_name = "${var.route53_sub_domain_name}"
certificate_arn = "${aws_acm_certificate.cert.arn}"
}
resource "aws_route53_record" "sub_domain" {
name = "${var.route53_sub_domain_name}"
type = "A"
zone_id = "${data.aws_route53_zone.root_domain.zone_id}"
alias {
name = "${aws_api_gateway_domain_name.domain_name.cloudfront_domain_name}"
zone_id = "${aws_api_gateway_domain_name.domain_name.cloudfront_zone_id}"
evaluate_target_health = false
}
}
resource "aws_acm_certificate" "cert" {
# api-gateway / cloudfront certificates need to use the us-east-1 region
provider = "aws.cloudfront-acm-certs"
domain_name = "${var.route53_sub_domain_name}"
validation_method = "DNS"
}
resource "aws_route53_record" "cert_validation" {
name = "${aws_acm_certificate.cert.domain_validation_options.0.resource_record_name}"
type = "${aws_acm_certificate.cert.domain_validation_options.0.resource_record_type}"
zone_id = "${data.aws_route53_zone.root_domain.zone_id}"
records = ["${aws_acm_certificate.cert.domain_validation_options.0.resource_record_value}"]
ttl = 60
}
resource "aws_acm_certificate_validation" "cert" {
# api-gateway / cloudfront certificates need to use the us-east-1 region
provider = "aws.cloudfront-acm-certs"
certificate_arn = "${aws_acm_certificate.cert.arn}"
validation_record_fqdns = ["${aws_route53_record.cert_validation.fqdn}"]
timeouts {
create = "45m"
}
}