我是亚马逊Route53的新手。截至目前,我可以在我的亚马逊帐户中创建托管区域和资源记录集。但现在我想在我的托管区域中搜索记录集是否已存在。例如
Hosted zone "abc.com"
并且它中有两个记录集。
A.abc.com
B.abc.com
现在,我想查询hosted zone
并查看A.abc.com
中abc.com
是否已存在。
那么,有没有我可以使用的API,我可以传递我的亚马逊凭证和我的亚马逊hostedzone
和搜索的"record set"
然后我可以得到结果,无论该记录集是否已经存在。请指导我。
经过研究,我发现"ListResourceRecordSet"
会给我一个特定区域的列表。但我不想要列表,我只想检查该条目是否已存在。
答案 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方法以及name
和maxitems
参数来有效地执行此检查。您尚未指定如何访问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
参数来实现这一点。