You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Terraform创建并验证AWS ACM证书时遇无限等待问题

问题:Terraform创建AWS ACM证书验证无限耗时

尝试使用Terraform创建并验证AWS ACM证书,配置如下:

// not used in this config, but it does exist
resource "aws_route53_zone" "main" {
  name = "mycompany.com"
}

resource "aws_route53_zone" "dev" {
  name = "dev.mycompany.com"
}

resource "aws_acm_certificate" "cert" {
  domain_name       = "*.dev.mycompany.com"
  validation_method = "DNS"
  key_algorithm     = "RSA_2048"
}

resource "aws_route53_record" "records" {
  for_each = {
    for dvo in aws_acm_certificate.cert.domain_validation_options : dvo.domain_name => {
      name   = dvo.resource_record_name
      record = dvo.resource_record_value
      type   = dvo.resource_record_type
    }
  }
  allow_overwrite = true
  name            = each.value.name
  records         = [each.value.record]
  ttl             = 300
  type            = each.value.type
  zone_id         = aws_route53_zone.dev.zone_id
}

resource "aws_acm_certificate_validation" "validation" {
  certificate_arn = aws_acm_certificate.cert.arn
  validation_record_fqdns = [for record in aws_route53_record.records : record.fqdn]
}

但aws_acm_certificate_validation的创建过程无限耗时:

aws_acm_certificate_validation.validation: Still creating... [5m30s elapsed]

终止执行后收到提示:

waiting for ACM Certificate ({arn here}) to be issued: context canceled

配置中存在什么问题?


问题原因与解决方法

核心问题:Route53验证记录的名称配置错误

你的证书域名是*.dev.mycompany.com,对应的DNS验证记录FQDN应该是类似_xxxxxx.dev.mycompany.com的格式。但当前配置中,直接将ACM返回的resource_record_name(完整FQDN)作为Route53记录的name字段,而你的Route53 zone是dev.mycompany.com——Route53会自动在记录名称后追加zone域名,最终生成的记录FQDN会变成_xxxxxx.dev.mycompany.com.dev.mycompany.com,完全不符合ACM的验证要求,导致证书一直无法完成DNS验证,Terraform只能无限等待。

修正方案

修改aws_route53_record资源的name字段,使用trimsuffix函数去掉完整FQDN中的zone域名后缀:

resource "aws_route53_record" "records" {
  for_each = {
    for dvo in aws_acm_certificate.cert.domain_validation_options : dvo.domain_name => {
      name   = dvo.resource_record_name
      record = dvo.resource_record_value
      type   = dvo.resource_record_type
    }
  }
  allow_overwrite = true
  // 去掉完整FQDN中的zone域名后缀,避免Route53重复追加
  name            = trimsuffix(each.value.name, ".${aws_route53_zone.dev.name}")
  records         = [each.value.record]
  ttl             = 300
  type            = each.value.type
  zone_id         = aws_route53_zone.dev.zone_id
}

另外,从Terraform AWS Provider 3.0+开始,aws_acm_certificate_validation资源可以无需显式指定validation_record_fqdns,它会自动关联验证记录,也可以简化验证资源的配置:

resource "aws_acm_certificate_validation" "validation" {
  certificate_arn = aws_acm_certificate.cert.arn
  // 移除validation_record_fqdns,依赖关系由Terraform自动处理
}

验证步骤

  • 应用修正后的配置:terraform apply
  • 查看Route53记录,确认生成的验证记录FQDN与ACM控制台中显示的一致
  • 等待数分钟,ACM会自动完成DNS验证并颁发证书,Terraform的创建过程也会正常结束

内容的提问来源于stack exchange,提问作者Héctor Valls

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 13:21:33