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

How to get all resource record sets from Route 53 with boto?

我正在编写一个脚本来确保我们所有的 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 not 映射到 ListResourceRecordSets?

关于如何从 Route 53 中获取所有记录有什么建议吗?

更新: cli53 (https://github.com/barnybug/cli53/blob/master/cli53/client.py) 能够通过其以 BIND 格式 (cmd_export) 导出 Route 53 区域的功能做到这一点。但是,我的 Python 技能还不足以让我理解该代码的工作原理!

谢谢。

get_all_rrsets returns 派生自 Python 的列表 class 的 ResourceRecordSets。默认情况下,返回 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 条额外记录。