我想列出特定托管区域中的所有CNAME记录。假设我在托管区域中有超过400条记录。我正在使用boto3
:
response_per_zone = client.list_resource_record_sets(HostedZoneId=Id, MaxItems='100')
这个命令列出所有类型的100条记录。有很多CNAME记录缺失了。
我该如何遍历所有记录以便列出所有的CNAME记录?
我想列出特定托管区域中的所有CNAME记录。假设我在托管区域中有超过400条记录。我正在使用boto3
:
response_per_zone = client.list_resource_record_sets(HostedZoneId=Id, MaxItems='100')
这个命令列出所有类型的100条记录。有很多CNAME记录缺失了。
我该如何遍历所有记录以便列出所有的CNAME记录?
你应该使用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
IsTruncated
将设置为 True)- 然后您可以查看响应中的 NextRecordName
的结果,作为 StartRecordName
的参数。如果需要,让我知道您是否需要我编写一个示例 :)好的,我在仔细阅读文档后找到了答案。如果返回的最大记录数超过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)
import boto3
aws_profile = '...'
zone_id = 'Z2A...'
max_records = 1000
session = boto3.Session(profile_name=aws_profile)
route53 = session.client('route53')
dns_records = []
dns_in_iteration = route53.list_resource_record_sets(HostedZoneId=zone_id)
dns_records.extend(dns_in_iteration['ResourceRecordSets'])
while len(dns_records) < max_records and 'NextRecordName' in dns_in_iteration.keys():
next_record_name = dns_in_iteration['NextRecordName']
print('listing next set: ' + next_record_name)
dns_in_iteration = route53.list_resource_record_sets(HostedZoneId=zone_id, StartRecordName=next_record_name)
dns_records.extend(dns_in_iteration['ResourceRecordSets'])
print('records found: ' + str(len(dns_records)))
for record in dns_records:
if record['Type'] == 'CNAME':
print(record['Name'])