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前端已使用该子托管区,这部分应该已经配置正确,但可以再检查确认。
验证步骤
- 重新部署修正后的Terraform代码
- 等待几分钟,ACM会自动检测到正确的DNS验证记录,证书状态会变为
Issued - 后续API Gateway的自定义域名配置和Route53解析记录即可正常生效
内容的提问来源于stack exchange,提问作者Donovan HOANG
相关产品推荐
相关产品推荐

