【问题标题】:How to Query Route53 hosted zone to check for an existing record set?如何查询 Route53 托管区域以检查现有记录集?
【发布时间】:2017-08-14 19:17:49
【问题描述】:

我是亚马逊 Route53 的新手。到目前为止,我可以在我的亚马逊帐户中创建托管区域和资源记录集。但现在我想在我的托管区域中搜索记录集是否已经存在。例如

Hosted zone "abc.com" 里面有两条记录。

  1. A.abc.com
  2. B.abc.com

现在我想查询我的hosted zone,看看abc.com中是否有A.abc.com已经存在

那么,我可以使用任何 API 来传递我的亚马逊凭据和我的亚马逊 hostedzone 和搜索到的 "record set",然后我可以返回结果是否该记录集已经存在。请指导我。

经过研究,我发现有"ListResourceRecordSet" 可以返回特定区域的列表。但是我不想要列表我只想检查条目是否已经存在。

【问题讨论】:

    标签: amazon-web-services dns amazon-route53


    【解决方案1】:

    没有办法过滤 API 调用,但是有办法过滤返回的数据。使用 CLI,您可以通过 --query 选项执行此操作。

    From the documentation: "要查看特定名称的所有资源记录集,请使用 --query 参数将其过滤掉。例如:"

    aws route53 list-resource-record-sets --hosted-zone-id Z2LD58HEXAMPLE --query "ResourceRecordSets[?Name == 'A.abc.com']"
    

    【讨论】:

    • 请注意,在大区域中,这可能需要很长时间,您甚至可能会收到限制错误。我有点惊讶为什么没有更细粒度的查询。
    【解决方案2】:

    我已经能够使用ListResourceRecordSet API 方法以及namemaxitems 参数有效地执行此检查。您尚未指定如何访问 API,因此我将使用标准 AWS REST API 来解释这一点。

    举个例子:

    调用将A.abc.com 作为name 参数和1 作为maxitems 参数传递的API。您的请求将如下所示:https://route53.amazonaws.com/2013-04-01/hostedzone/{YOUR_HOSTED_ZONE_ID}/rrset?name=A.abc.com.&maxitems=1

    请注意,我在资源名称A.abc.com. 的末尾添加了一个尾随点(“.”)API reference 表示它可能会影响结果排序顺序,所以我添加它以防万一。

    您将获得以下格式的 XML 结果:

    <?xml version="1.0"?>
    <ListResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2013-04-01/">
        <ResourceRecordSets>
            <ResourceRecordSet>
                <Name>A.abc.com.</Name>
                <Type>A</Type>
                <TTL>3600</TTL>
                <ResourceRecords>
                    <ResourceRecord>
                        <Value>SOME_IP_ADDRESS</Value>
                    </ResourceRecord>
                </ResourceRecords>
            </ResourceRecordSet>
        </ResourceRecordSets>
        <IsTruncated>true</IsTruncated>
        <NextRecordName>B.abc.com.</NextRecordName>
        <NextRecordType>A</NextRecordType>
        <MaxItems>1</MaxItems>
    </ListResourceRecordSetsResponse>
    

    现在您将不得不进行一些解析。检查结果以查看是否有一个 ResourceRecordSet 以及它的 Name 属性是否与您正在查找的资源记录的名称匹配(您可能希望对两个值进行不区分大小写的比较)。请记住,Name 属性的末尾有尾随句点(“.”),因此请在进行比较之前将其添加到您要搜索的名称中。

    如果只有一个资源记录集并且名称与您要查找的匹配,则它存在。如果其中一项检查失败,则它不存在。

    当然,这并不像GetResourceRecordSet 操作那么简单,但至少它使您不必查询整个区域并解析一堆记录。您也不会遇到使用 CLI --query 选项时可能出现的长时间延迟或限制问题。

    似乎没有办法将此方法与AWS CLI 一起使用,因为由于某种原因它缺少--name 参数。我可以保证JavaScript SDK 将允许您使用StartRecordName 参数执行此操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-06
      • 2018-07-09
      • 2020-08-07
      • 1970-01-01
      相关资源
      最近更新 更多