Terraform配置AWS ACM SSL证书时DNS验证步骤失败问题求助
Terraform ACM证书DNS验证失败修复方案
核心问题原因
你配置的aws_acm_certificate_validation资源的validation_record_fqdns参数错误引用了自定义变量var.fqdn_records,没有和实际创建的aws_route53_record资源做绑定:
- 没有自动建立依赖关系,Terraform可能会在Route53记录创建完成/生效前就执行验证步骤
- 如果
var.fqdn_records的值和实际生成的DNS验证记录不一致,会直接触发找不到记录的报错
你收到的报错信息如下:
aws_acm_certificate_validation.this: Creating... ╷ │ Error: 1 error occurred: │ * missing course.com DNS validation record: _7eaea1fef0f356222c22a6bc1eb7bbd7.course.com
修复方案
替换aws_acm_certificate_validation的validation_record_fqdns参数取值,直接引用你创建的Route53记录的FQDN属性,修改后完整配置如下:
resource "aws_acm_certificate" "this" { domain_name = var.domain validation_method = var.validation_method tags = { Name = var.domain, Environment = var.environment } lifecycle { create_before_destroy = true } } resource "aws_acm_certificate_validation" "this" { certificate_arn = aws_acm_certificate.this.arn # 替换原var.fqdn_records引用,自动关联已创建的DNS验证记录 validation_record_fqdns = [for record in aws_route53_record.this : record.fqdn] } resource "aws_route53_record" "this" { for_each = { for dvo in aws_acm_certificate.this.domain_validation_options : dvo.domain_name => { name = dvo.resource_record_name record = dvo.resource_record_value type = dvo.resource_record_type zone_id = var.zone_id } } allow_overwrite = true name = each.value.name records = [each.value.record] ttl = 300 type = each.value.type zone_id = each.value.zone_id }
可选排查项
如果修改后仍有问题,可以依次核对以下配置:
- 确认
var.zone_id为course.com对应的公网Route53托管区ID,不要使用私网托管区或其他域名的托管区ID - 手动验证记录是否生效:执行
dig _7eaea1fef0f356222c22a6bc1eb7bbd7.course.com CNAME,确认返回的记录值和ACM控制台显示的验证值一致 - 如果你是为CloudFront服务申请证书,必须在
us-east-1区域创建ACM证书,否则即使验证通过也无法正常关联CloudFront分发 - 如果你的AWS账号配置了多区域provider,需确保
aws_acm_certificate_validation的provider和aws_acm_certificate的provider为同一个区域
内容的提问来源于stack exchange,提问作者Manish Garotki
相关产品推荐
相关产品推荐

