如何使用boto从Route 53获取所有资源记录集?

时间:2015-04-21 10:52:00

标签: boto amazon-route53

我正在编写一个脚本,确保我们所有的EC2实例都有DNS条目,并且所有DNS条目都指向有效的EC2实例。

我的方法是尝试获取域的所有资源记录,以便在检查实例名称时可以遍历列表。

然而,获取所有资源记录似乎并不是一件非常简单的事情! GET ListResourceRecordSets的文档似乎暗示它可能会做我想要的,而boto等效似乎是get_all_rrsets ......但它似乎并没有像我期望的那样工作。

例如,如果我去:

r53 = boto.connect_route53()
zones = r53.get_zones()
fooA = r53.get_all_rrsets(zones[0][id], name="a")

然后我得到100个结果。如果我然后去:

fooB = r53.get_all_rrsets(zones[0][id], name="b")

我得到相同的 100个结果。我误解了吗?get_all_rrsets 映射到ListResourceRecordSets?

关于如何从Route 53获取所有记录的任何建议?

更新: cli53(https://github.com/barnybug/cli53/blob/master/cli53/client.py)能够通过其功能以BIND格式(cmd_export)导出Route 53区域。但是,我的Python技能不够强大,无法让我理解代码是如何工作的!

感谢。

1 个答案:

答案 0 :(得分:4)

get_all_rrsets返回一个ResourceRecordSets,它派生自Python的列表类。默认情况下,返回100条记录。因此,如果您将结果用作列表,它将有100条记录。你想要做的是这样的事情:

r53records = r53.get_all_rrsets(zones[0][id])
for record in r53records:
    # do something with each record here

或者,如果您想要列表中的所有记录:

records = [r for r in r53.get_all_rrsets(zones[0][id]))]

当使用for循环或列表理解进行迭代时,Boto将根据需要一次获取额外的记录(最多)100条记录。