AWS Route 53使用boto3列出CNAME记录

Ami*_*740 3 cname amazon-web-services amazon-route53

我想列出某个托管区域中的所有CNAME记录。假设我的托管区域中有400多个记录。我正在使用boto3

response_per_zone = client.list_resource_record_sets(HostedZoneId=Id, MaxItems='100')
Run Code Online (Sandbox Code Playgroud)

该命令列出了所有类型的100条记录。缺少许多CNAME记录。
如何遍历所有记录,以便可以列出所有CNAME记录?

Ser*_*zar 5

您应该只使用AWS提供的官方分页器方法:https : //boto3.readthedocs.io/en/latest/reference/services/route53.html#Route53.Paginator.ListResourceRecordSets

不管记录数量如何,列出CNAME记录的示例代码:

#!/usr/bin/env python3

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 occurred getting source zone records:')
    print(str(error))
    raise
Run Code Online (Sandbox Code Playgroud)


Ami*_*740 1

好吧,在清楚地阅读文档后我找到了答案。如果返回的最大项目数超过 100,则每 100 条记录将有一个尾随 NextRecordType 和 NextRecordName 字段。我们需要使用它们来获取接下来的 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)
Run Code Online (Sandbox Code Playgroud)