如何查询Route53托管区域以检查exixting记录集

时间:2017-03-22 15:12:01

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

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

Hosted zone "abc.com"并且它中有两个记录集。

  1. A.abc.com
  2. B.abc.com
  3. 现在,我想查询hosted zone并查看A.abc.comabc.com 是否已存在

    那么,有没有我可以使用的API,我可以传递我的亚马逊凭证和我的亚马逊hostedzone和搜索的"record set"然后我可以得到结果,无论该记录集是否已经存在。请指导我。

    经过研究,我发现"ListResourceRecordSet"会给我一个特定区域的列表。但我不想要列表,我只想检查该条目是否已存在。

2 个答案:

答案 0 :(得分:2)

无法过滤API调用,但有一种方法可以过滤返回的数据。使用CLI,您可以使用--query选项执行此操作。

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

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

答案 1 :(得分:1)

我已经能够使用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选项可能造成的长时间延迟或节流问题。

由于某种原因,它缺少--name参数,因此似乎无法与AWS CLI一起使用此方法。我可以保证JavaScript SDK将允许您使用StartRecordName参数来实现这一点。