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

AWS Api Gateway自定义域名证书Terraform部署Pending状态求助

在子托管区app.root.com下为api.app.root.com配置ACM证书的问题解决

问题原因

当在子域托管区app.root.com中创建api.app.root.com的ACM证书时,Terraform默认使用ACM返回的完整验证记录名称(如_abc123.api.app.root.com)作为Route53记录的name字段。但在子托管区中,记录名称会自动拼接托管区域名后缀,导致最终生成的FQDN变为_abc123.api.app.root.com.app.root.com——ACM无法找到这条错误的记录,因此证书一直处于Pending状态。

而在根托管区root.com下创建api.root.com的证书时,验证记录名称_abc123.api.root.com在根托管区中生成的FQDN是正确的,所以证书能立即签发。

解决方案(完全可以实现原需求)

只需修正certificate.tf中验证记录的name字段,将其处理为相对于子托管区域名的相对名称,避免域名重复拼接。具体修改如下:

修正后的certificate.tf验证记录部分

resource "aws_route53_record" "api_validation" {
  for_each = {
    for dvo in aws_acm_certificate.api.domain_validation_options : dvo.domain_name => {
      # 去掉验证记录名称中多余的子托管区域名后缀
      name   = trim_suffix(dvo.resource_record_name, ".${data.aws_route53_zone.main.name}")
      record = dvo.resource_record_value
      type   = dvo.resource_record_type
    }
  }

  allow_overwrite = true
  name            = each.value.name
  records         = [each.value.record]
  ttl             = 60
  type            = each.value.type
  zone_id         = data.aws_route53_zone.main.zone_id
}

额外确认项

确保根托管区root.com中已正确配置app.root.com的NS记录,指向子托管区app.root.com的域名服务器。这一步是DNS解析链路完整的前提,既然你的CloudFront前端已使用该子托管区,这部分应该已经配置正确,但可以再检查确认。

验证步骤

  1. 重新部署修正后的Terraform代码
  2. 等待几分钟,ACM会自动检测到正确的DNS验证记录,证书状态会变为Issued
  3. 后续API Gateway的自定义域名配置和Route53解析记录即可正常生效

内容的提问来源于stack exchange,提问作者Donovan HOANG

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 15:45:01