Terraform配置Route53 NS记录无报错但一直无法完成问题咨询
该问题的常见原因如下:
- 缺失
allow_overwrite配置参数:根域名的NS记录是Route53托管zone创建时自动生成的系统默认记录,属于已存在的资源。Terraform的aws_route53_record资源默认禁止覆盖已有记录,你没有在资源块中显式添加allow_overwrite = true参数时,AWS API会返回记录冲突错误,部分旧版本的AWS Provider不会正确抛出该错误,会导致进程无限等待无输出。
你可以先修改资源块补充该参数尝试:
resource "aws_route53_record" "fix-ns" { zone_id = aws_route53_zone.main.zone_id name = var.domain_name type = "NS" ttl = "30" records = ["ns-1999.awsdns-57.co.uk", "ns-1031.awsdns-00.org", "ns-688.awsdns-22.net", "ns-325.awsdns-40.com"] allow_overwrite = true }
- 网络连通性异常:部署环境到AWS Route53 API的网络链路不通,比如VPC端点配置错误、安全组/防火墙拦截了443端口出网请求、代理配置异常,会导致Terraform的API请求无法收发,无超时触发时就会一直阻塞。
- AWS API限流:短时间内Route53 API调用频率超出账户限流阈值,AWS会将请求加入静默重试队列,部分旧版本Provider没有配置正确的退避和超时策略,不会输出
Still creating...提示。 - 托管zone状态异常:
aws_route53_zone.main本身处于未完成创建的PENDING状态,或者对应域名处于被锁定、转移中状态,Route53会暂时拒绝该zone下的NS记录修改请求,导致请求挂起。 - 权限隐式限制:即使配置了AmazonRoute53FullAccess托管策略,要是存在权限边界、组织SCP(服务控制策略)、会话策略限制了Route53记录修改操作,或者操作的zone属于其他账户的跨账户资源,也会导致API请求被拒绝但Provider没有正确捕获错误。
- NS记录值完全匹配已有记录:如果你指定的
records数组内容和当前zone已有的默认NS记录完全一致,Terraform会检测不到变更,部分版本的Provider会陷入空逻辑循环导致阻塞,这种情况你可以先执行terraform import aws_route53_record.fix-ns ZONEID_DOMAIN_NS导入已有记录再做后续操作。
内容的提问来源于stack exchange,提问作者gingerbreadboy
相关产品推荐
相关产品推荐

