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记录?
您应该只使用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)
好吧,在清楚地阅读文档后我找到了答案。如果返回的最大项目数超过 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)
| 归档时间: |
|
| 查看次数: |
4200 次 |
| 最近记录: |