Boto3-change_resource_record_sets更改记录类型失败

时间:2018-07-19 13:09:10

标签: amazon-web-services python-3.6 amazon-route53

在当前情况下,我尝试使用boto3.change_resource_record_sets更新现有记录的类型,并尝试将记录从类型A更改为类型CNAME-具有匹配的值。

我遇到以下错误:

botocore.errorfactory.InvalidChangeBatch:
An error occurred (InvalidChangeBatch) when calling the ChangeResourceRecordSets
operation: RRSet of type A with DNS name test.test.v3.prod.example.com.
is not permitted because a conflicting RRSet of type  CNAME with the same
DNS name already exists in zone test.v3.prod.example.com.

此操作完全可以通过AWS UI来完成(仅更新我要从代码中更新的同一区域中的记录)。

这是我的代码:

def update_record(zone_id):
  batch = {
    'Changes': [
      {
        'Action': 'UPSERT',
        'ResourceRecordSet' : {
          'Name' : 'test.test.v3.prod.example.com.',
          'Type' : 'CNAME',
          'TTL' : 15,
          'ResourceRecords' : [{'Value': 'www.example.com'}]
        }
      }
    ]
  }

  # THIS LINE THROWS THE EXCEPTION
  response = client.change_resource_record_sets(HostedZoneId=zone_id, ChangeBatch=batch)

  return response

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您无法使用UPSERT更改记录类型。名称和类型用作更改ttl和资源记录的键。您的更改应为:

batch = {
  'Changes': [
    {
      'Action': 'DELETE',
      'ResourceRecordSet' : {
        'Name' : 'test.test.v3.prod.example.com.',
        'Type' : 'A',                                # or AAAA
        'TTL' : 15,
        'ResourceRecords' : [{'Value': '1.2.3.4'}]   # or whatever it is
      }
    },
    {
      'Action': 'UPSERT',                            # INSERT, really!
      'ResourceRecordSet' : {
        'Name' : 'test.test.v3.prod.example.com.',
        'Type' : 'CNAME',
        'TTL' : 15,
        'ResourceRecords' : [{'Value': 'www.example.com'}]
      }
    ]
  }