2016-10-22 2 views
4

Как удалить запись DNS в Route 53? Я следовал за 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

Мне очень грустно, что они изменили эту функцию. В обратном направлении вы смогли удалить запись на основе «Имя». Теперь вам нужно сделать много поисков, прежде чем делать удаление, потому что вам нужны значение, TTL и тип. –