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

AWS Boto3调用Route53创建DNS记录无生效问题求助

问题描述

原本运行正常的代码,通过AWS API获取ECS容器信息,查询Route53现有记录后调用Boto3的change_resource_record_sets接口更新DNS区域以匹配ECS信息,现在出现异常:调用返回HTTP 200且无异常抛出,但DNS区域未产生预期变更。

相关代码:

try:
    r = get_primary_client('route53').change_resource_record_sets(
        HostedZoneId=dns_zone['Id'],
        ChangeBatch={'Changes': changes}
    )
    processing_info['r'] = copy.deepcopy(r)
    assert r['ResponseMetadata']['HTTPStatusCode'] == 200
except Exception as ex:
    return str(ex)

dns_zone的JSON内容:

{
      "CallerReference": "RISWorkflow-3bdd50ce72fe59acd56ed296752aab38",
      "Config": {
        "Comment": "HostedZone created by Route53 Registrar",
        "PrivateZone": false
      },
      "Id": "/hostedzone/Z30M8MWTQXQ2O2",
      "Name": "ourdomain.com.",
      "ResourceRecordSetCount": 54
}

changes参数的JSON内容:

[
  {
    "Action": "CREATE",
    "ResourceRecordSet": {
      "Name": "appserver2h.devqa.ourdomain.com",
      "ResourceRecords": [
        {
          "Value": "10.13.11.98"
        }
      ],
      "TTL": 60,
      "Type": "A"
    }
  },
  {
    "Action": "CREATE",
    "ResourceRecordSet": {
      "Name": "grinder2h.devqa.ourdomain.com",
      "ResourceRecords": [
        {
          "Value": "10.13.12.172"
        }
      ],
      "TTL": 60,
      "Type": "A"
    }
  }
]

调用返回结果显示变更状态为PENDING,后续通过AWS CLI查询变更状态为INSYNC,但appserver2h.devqa.ourdomain.com和grinder2h.devqa.ourdomain.com仍未在DNS区域中创建记录。

排查方向
  • 域名后缀格式错误:Route53要求记录的Name字段必须以带点的域名后缀结尾。当前changes中的域名未带末尾的点,Route53会自动补全托管区域名,最终生成appserver2h.devqa.ourdomain.com.ourdomain.com.这类错误域名,导致你在预期位置找不到记录。需将Name修正为appserver2h.devqa.ourdomain.com.(末尾加一个点)。
  • CREATE动作无法覆盖已有记录:如果这些记录之前已存在(哪怕值不同),使用CREATE动作不会触发更新,只会返回成功但无实际变更。建议改用UPSERT动作,它会自动判断是创建新记录还是更新已有记录。
  • 托管区ID不匹配:确认dns_zone['Id']对应的确实是ourdomain.com.的托管区,避免因误传入其他托管区ID,导致记录创建到了非目标区域。
  • 控制台显示延迟:即使变更状态为INSYNC,Route53控制台可能存在几分钟的显示延迟。可通过CLI直接查询托管区记录集确认:
    aws route53 list-resource-record-sets --hosted-zone-id Z30M8MWTQXQ2O2 --query "ResourceRecordSets[?Name=='appserver2h.devqa.ourdomain.com.']"
    
    查询时注意带末尾的点,避免匹配错误。
  • IAM权限隐性限制:虽然调用返回200,仍需确认执行代码的IAM角色是否有完整的route53:ChangeResourceRecordSets权限,且权限范围包含目标托管区。部分场景下权限配置存在前缀限制,会导致操作成功但无实际效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 08:40:31