如何获取 AWS Route53 托管区域 ID?
How to fetch the AWS Route53 hosted zone id?
我是亚马逊服务及其 API 的新手。
使用 Amazon route53Clinet class,我知道有一种方法 getHostedZone 可以根据 ID 获取托管区域信息。但是我有一个案例,我有域名,我需要获取托管区域 ID 可能是基于提供的域名?我怎样才能做到这一点?
您可以使用 listHostedZones
或 listHostedZonesByName
查询有关您的托管区域的服务。
但是...您确实需要知道托管区域 ID -- 存储或缓存它 -- 因为可以在 Route 53 中为完全相同的域创建多个托管区域...并且如果您的代码盲目地按域名搜索托管区域,您最终可能会修改错误的区域......特别是如果您陷入假设只有一个匹配项的反模式陷阱,因此您总是 select 第一个匹配。
简单部署每个域名只有一个托管区域,但您可能拥有多个托管区域的原因包括私有托管区域(只能从您的 VPC 内部访问)或重复的 public 托管区域,其中您正在进行 DNS 重建或硬切换。 Route 53 允许您使用 4 个不同的名称服务器创建第二个(或第三个等)托管区域。
此外,当然,在本地获取此信息以避免发出不必要的 API 请求是有意义的,这会耗费时间和金钱。正如您可能注意到的那样,托管区域 ID 在控制台中也可见。
我知道这可能是旧的,但我在最初创建 DNS 区域时通过执行以下操作能够使用 Powershell 获取 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 中编写一些更大的脚本了。
我使用 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 项目。请注意,这可能 return 不止一条记录。
输出是匹配的托管区域 ID 字符串,例如:
/hostedzone/ABCDEF12345678
然后您可以列出托管区域 ID 的资源记录集:
aws route53 list-resource-record-sets \
--hosted-zone-id "/hostedzone/ABCDEF12345678"
这将为您提供包含托管区域 ID 的列表。
aws route53 list-hosted-zones | jq -r '.HostedZones| .[] | .Id'
我是亚马逊服务及其 API 的新手。
使用 Amazon route53Clinet class,我知道有一种方法 getHostedZone 可以根据 ID 获取托管区域信息。但是我有一个案例,我有域名,我需要获取托管区域 ID 可能是基于提供的域名?我怎样才能做到这一点?
您可以使用 listHostedZones
或 listHostedZonesByName
查询有关您的托管区域的服务。
但是...您确实需要知道托管区域 ID -- 存储或缓存它 -- 因为可以在 Route 53 中为完全相同的域创建多个托管区域...并且如果您的代码盲目地按域名搜索托管区域,您最终可能会修改错误的区域......特别是如果您陷入假设只有一个匹配项的反模式陷阱,因此您总是 select 第一个匹配。
简单部署每个域名只有一个托管区域,但您可能拥有多个托管区域的原因包括私有托管区域(只能从您的 VPC 内部访问)或重复的 public 托管区域,其中您正在进行 DNS 重建或硬切换。 Route 53 允许您使用 4 个不同的名称服务器创建第二个(或第三个等)托管区域。
此外,当然,在本地获取此信息以避免发出不必要的 API 请求是有意义的,这会耗费时间和金钱。正如您可能注意到的那样,托管区域 ID 在控制台中也可见。
我知道这可能是旧的,但我在最初创建 DNS 区域时通过执行以下操作能够使用 Powershell 获取 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 中编写一些更大的脚本了。
我使用 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 项目。请注意,这可能 return 不止一条记录。
输出是匹配的托管区域 ID 字符串,例如:
/hostedzone/ABCDEF12345678
然后您可以列出托管区域 ID 的资源记录集:
aws route53 list-resource-record-sets \
--hosted-zone-id "/hostedzone/ABCDEF12345678"
这将为您提供包含托管区域 ID 的列表。
aws route53 list-hosted-zones | jq -r '.HostedZones| .[] | .Id'