(InvalidChangeBatch)调用ChangeResourceRecordSets操作时 - 使用boto3更新资源记录

时间:2017-10-05 09:29:14

标签: python python-3.x boto3 amazon-route53

我正在尝试使用boto3将多个CNAME记录更新到Route53上托管的A,这是我的功能:

def change_resource_record(domain, zone_id, hosted_zone_id, balancer_id):
    print(domain, zone_id, hosted_zone_id, balancer_id)
    client.change_resource_record_sets(
        HostedZoneId=zone_id,
        ChangeBatch={
            "Comment": "Automatic DNS update",
            "Changes": [
                {
                    "Action": "UPSERT",
                    "ResourceRecordSet": {
                        "Name": domain,
                        "Type": "A",
                        "AliasTarget": {
                            "HostedZoneId": hosted_zone_id,
                            "DNSName": balancer_id,
                            "EvaluateTargetHealth": False
                        }
                    }
                },
            ]
        }
    )

我收到此错误:

Traceback (most recent call last):
  File "load_balancer.py", line 138, in <module>
    get_balancer(domain)
  File "load_balancer.py", line 135, in get_balancer
    change_resource_record(domain, zone_id, hosted_zone_id, balancer_id)
  File "load_balancer.py", line 116, in change_resource_record
    "EvaluateTargetHealth": False
  File "C:\Python36\lib\site-packages\botocore\client.py", line 312, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "C:\Python36\lib\site-packages\botocore\client.py", line 601, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.errorfactory.InvalidChangeBatch: An error occurred (InvalidChangeBatch) when calling the ChangeResourceRecordSets operation: RRSet of type A with DNS name suffix.domain.tld. is not permitted because a conflicting RRSet of type  CNAME with the same DNS name already exists in zone domain.tld.

更新记录的正确方法是什么,我应该删除该条目然后重新创建吗?

非常感谢任何建议。

1 个答案:

答案 0 :(得分:0)

我在domain中有一个错过的结束时段,因此更改为此解决了我的问题:

            "ResourceRecordSet": {
                "Name": domain + '.',
                "Type": "A",
                "AliasTarget": {
                    "HostedZoneId": hosted_zone_id,
                    "DNSName": balancer_id,
                    "EvaluateTargetHealth": False
                }
            }