2017-01-18 4 views
1

Я хочу перечислить все записи CNAME в определенной зоне размещения. Допустим, у меня более 400 записей в моей зоне. Я использую boto3:AWS Route 53 Список записей CNAME с использованием boto3

response_per_zone = client.list_resource_record_sets(HostedZoneId=Id, MaxItems='100') 

Этот список команд 100 записей всех типов. Существует много записей CNAME.
Как пронумеровать все записи, чтобы я мог перечислить все записи CNAME?

ответ

0

Хорошо, я нашел ответ на это после четкого чтения документации. Каждые 100 записей будут иметь конечное поле NextRecordType и NextRecordName, если возвращаемые maxitems будут больше 100. Нам нужно использовать их для получения следующих 100 элементов и так далее. Этот код работает для меня, дайте мне знать, если мой подход неправильный.

NextRecordName = 'a' 
NextRecordType = 'CNAME' 
while(NextRecordName is not None and NextRecordType is not None): 
    response_per_zone = client.list_resource_record_sets(HostedZoneId=Id,StartRecordName=NextRecordName, StartRecordType=NextRecordType ,MaxItems='400') 

    try: 
     NextRecordName = response_per_zone['NextRecordName'] 
     NextRecordType = response_per_zone['NextRecordType'] 
    except Exception as e: 
     NextRecordName = None 
     NextRecordType = None 



    print NextRecordType 
    print NextRecordName 
    #Since I need to find CNAME records, this is a function to check whether the record is CNAME, checking it is done using response_record = client.list_resource_record_sets(HostedZoneId=hostedzone, StartRecordName=cname_record, MaxItems='1') 

    private_zone = resp['Config']['PrivateZone'] 
    if private_zone == False: 
     find_record(response_per_zone, Id, record_stack) 
1

Согласно AWS documentation: флаг будет установлен в ответ, чтобы указать, если результат был усечен (IsTruncated будет установлен в True) - вы можете посмотреть на результат NextRecordName в ответ как аргумент StartRecordName

Позвольте мне знать, если вам нужно, чтобы я написать код пример, и я был бы счастлив :)

1

в то время как некоторые из ответов может работать, вы должны просто использовать официальный метод Paginator при условии от AWS: https://boto3.readthedocs.io/en/latest/reference/services/route53.html#Route53.Paginator.ListResourceRecordSets

Пример кода для листинга CNAME записи, независимо от количества записей:

#!/usr/bin/env python3 

# get source zone records and add them into changes list 
paginator = client.get_paginator('list_resource_record_sets') 
try: 
    source_zone_records = paginator.paginate(HostedZoneId='HostedZoneId') 
    for record_set in source_zone_records: 
     for record in record_set['ResourceRecordSets']: 
      if record['Type'] == 'CNAME': 
       print (record['Name']) 

except Exception as error: 
    print ('An error occured getting source zone records') 
    exit(1) 
Смежные вопросы