【问题标题】:How to get all resource record sets from Route 53 with boto?如何使用 boto 从 Route 53 获取所有资源记录集?
【发布时间】:2015-06-28 11:47:41
【问题描述】:

我正在编写一个脚本,以确保我们所有的 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 技能还不够强大,无法让我理解该代码的工作原理!

谢谢。

【问题讨论】:

    标签: boto amazon-route53


    【解决方案1】:

    get_all_rrsets 返回一个派生自 Python 列表类的 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 条记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-28
      • 2013-10-21
      • 2020-05-12
      • 2018-08-01
      • 2017-08-14
      • 1970-01-01
      • 2022-01-02
      相关资源
      最近更新 更多