2016-10-22 59 views
4

如何删除路由53中的DNS记录?我跟着documentation但我仍然无法使它工作。我不知道我是否在这里错过了一些东西。AWS Python SDK |路由53 - 删除资源记录

根据相关文档:

DELETE : Deletes a existing resource record set that has the specified values for Name , Type , SetIdentifier (for latency, weighted, geolocation, and failover resource record sets), and TTL (except alias resource record sets, for which the TTL is determined by the AWS resource that you're routing DNS queries to).

但我总是收到此错误:

Traceback (most recent call last):                                  
    File "./test.py", line 37, in <module>                                 
    main()                                        
    File "./test.py", line 34, in main                                  
    print(del_record())                                     
    File "./test.py", line 23, in del_record                                
    'TTL': 300                                       
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/botocore/client.py", line 251, in _api_call          
    return self._make_api_call(operation_name, kwargs)                             
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/botocore/client.py", line 537, in _make_api_call         
    raise ClientError(parsed_response, operation_name)                             
botocore.exceptions.ClientError: An error occurred (InvalidInput) when calling the ChangeResourceRecordSets operation: Invalid request 

这里是我的代码:

#!/usr/bin/env python3 


import boto3 

r53 = boto3.client('route53') 
zone_id = 'ABCDEFGHIJKLMNO' 
record = 'me.domain.com' 
r_type = 'CNAME' 
r_val = 'google.com' 


def del_record(): 
    response = r53.change_resource_record_sets(
     HostedZoneId=zone_id, 
     ChangeBatch={ 
      'Changes': [ 
       { 
        'Action': 'DELETE', 
        'ResourceRecordSet': { 
         'Name': record, 
         'Type': r_type, 
         'TTL': 300 
        } 
       } 
      ] 
     } 
    ) 

    return response 


def main(): 
    print(del_record()) 

if __name__ == '__main__': 
    main() 

回答

5

你需要一个嵌套的 'ResourceRecords' ResourceRecordSet中的数组,该数组具有记录的当前“目标”值。

HostedZoneId=zone_id, 
    ChangeBatch={ 
     'Changes': [ 
      { 
       'Action': 'DELETE', 
       'ResourceRecordSet': { 
        'Name': record, 
        'Type': r_type, 
        'TTL': 300, 
        'ResourceRecords': [ 
         { 
          'Value': target 
         } 
        ] 
       } 
      } 
     ] 
    } 
+5

我很伤心他们已经改变了这个功能。回头你可以根据“名称”删除记录。现在,在执行删除操作之前,您必须进行大量查找,因为您还需要Value,TTL和Type。 –