Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to fetch the AWS Route53 hosted zone id?

I am newbie to Amazon Services and their API.

Using Amazon route53Clinet class, I know there is a method getHostedZone which get the Hosted Zone information on the basis of ID. But I have a case where I have the domain name and i need to fetch the hosted zone id may be on the basis of the provided domain name? How can i do that?

like image 307
Shaonline Avatar asked Apr 11 '16 08:04

Shaonline


2 Answers

I use the AWS CLI and pipe the JSON results to the jq tool:

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

The jq expression selects each hosted zone JSON item that contains the name "example.com". Heads up that this may return more than one record.

The output is the matching hosted zone id strings such as:

/hostedzone/ABCDEF12345678

You can then list resource record sets for a hosted zone id:

aws route53 list-resource-record-sets \
--hosted-zone-id "/hostedzone/ABCDEF12345678"
like image 196
joelparkerhenderson Avatar answered Sep 28 '22 05:09

joelparkerhenderson


You can use listHostedZones or listHostedZonesByName to interrogate the service about your hosted zones.

However... You really need to already know the hosted zone ID -- store or cache it -- because it's possible to create more than one hosted zone in Route 53 for exactly the same domain... and if your code blindly searched for the hosted zone by domain name, you could end up modifying the wrong one... particularly if you fall into the antipattern trap of assuming only one match is possible, and therefore you always select the first match.

Simple deployments will only have one hosted zone for each domain name, but reasons you might have more than one would include private hosted zones (accessible only from inside your VPC) or duplicate public hosted zones, where you are doing a DNS rebuild or hard cutover. Route 53 allows you to create a second (or third, etc.) hosted zone with 4 different name servers.

Also, of course, it makes sense to have this information locally to avoid making unnecessary API requests, which can cost time and money. The hosted zone id is, as you likely noticed, also visible in the console.

like image 29
Michael - sqlbot Avatar answered Sep 28 '22 06:09

Michael - sqlbot