如何获取AWS Route53托管的区域id


How to fetch the AWS Route53 hosted zone id?

我是亚马逊服务及其API的新手。

使用Amazon route53linet类,我知道有一个方法getHostedZone,它基于ID获取托管区域信息。但我有一个例子,我有域名,我需要获取托管区域ID。可能是基于提供的域名?我该怎么做?

我使用AWS CLI并将JSON结果通过管道传输到jq工具:

aws route53 list-hosted-zones-by-name | 
jq --arg name "example.com." '
-r '.HostedZones | .[] | select(.Name=="'($name)") | .Id'

jq表达式选择每个包含名称"example.com"的托管区域JSON项。请注意,这可能会返回多个记录。

输出是匹配的托管区域id字符串,例如:

/hostedzone/ABCDEF12345678

然后,您可以列出托管区域id:的资源记录集

aws route53 list-resource-record-sets '
--hosted-zone-id "/hostedzone/ABCDEF12345678"

您可以使用listHostedZoneslistHostedZonesByName询问有关托管区域的服务。

然而。。。您确实需要知道托管区域ID——存储或缓存它——因为可以在Route 53中为完全相同的域创建多个托管区域。。。如果你的代码盲目地按域名搜索托管区域,你可能会修改错误的域名。。。特别是如果您陷入了假设只有一个匹配是可能的反模式陷阱,因此您总是选择第一个匹配。

简单的部署对于每个域名只有一个托管区域,但您可能有多个托管区域的原因包括私有托管区域(只能从VPC内部访问)或重复的公共托管区域,您正在进行DNS重建或硬切换。Route 53允许您使用4个不同的名称服务器创建第二个(或第三个等)托管区域。

当然,在本地拥有这些信息是有意义的,以避免产生不必要的API请求,这可能会花费时间和金钱。正如您可能注意到的,托管区域id在控制台中也可见。

这将为您提供一个包含托管区域ID的列表。

aws route53 list-hosted-zones | jq -r '.HostedZones| .[] | .Id'

我知道这可能是旧的,但在最初创建DNS区域时,我能够通过以下操作获取ID:

$route53Script = aws route53 create-hosted-zone --delegation-set-id /delegationset/DELIGATIONID --name domain.com --caller-reference blablabla | ConvertFrom-Json
$Route53ID = $route53Script.HostedZone.Id.replace("/hostedzone/","")

这给了我一个区域ID,然后我可以将其用作变量来执行此操作:

aws route53 change-resource-record-sets --hosted-zone-id $Route53ID --change-batch file://C:'default.json

我不知道这是否是最好的方法,但它有效!我相信你可以用PHP做同样的事情。不过,我已经有一段时间没有用PHP编写过一些更大的脚本了。