Craig
Craig

Reputation: 666

Derive the Route53 hosted Zone from current ec2

I'm trying to write a scalable and reusable script to provision ec2s using ansible. As part of this, I would like to be able to determine which Route53 hosted zone my machine is a part of, so I can add it as a record set for a private zone. I don't want to have to enter the zone ... I want to be able to figure it out using the ec2.

For a given ec2, I can get the instance. From the instance, I get get VPC-ID. I know that VPC-IDs are associated with Route53 hosted zones, but I can't seem to find an AWS CLI command to figure out the hosted zone from the VPC-ID.

I've found the command'route53 list-vpc-association-authorizations --hosted-zone-id=' command, which has to be run on each individual zone, but the result is an empty array for a zone that I know for a fact is associated with a VPC.

Can anyone help me to derive the correct private hosted zone, given that I know the VPC ID and ec2 instance id?

Thanks

Upvotes: 0

Views: 731

Answers (2)

cwingrav
cwingrav

Reputation: 989

Maybe too simple for people, but this works:

aws route53 list-hosted-zones --output text | grep 'MYDOMAIN' | awk '{print $3}' | cut -c13-

...Just lists the domains in AWS in column format, searches for your domain and then cuts out the zone id with awk and cut.

Upvotes: 1

Craig
Craig

Reputation: 666

Took me a while, but I figured it out:

getHostedZone(){
  ZONE_IDS=$(aws route53 --region $2 list-hosted-zones | jq ".HostedZones | map(.Id)")
  while IFS= read -r; do
    ZONE=$(aws route53 --region $2 get-hosted-zone --id $REPLY)
    hasVPCs=$(echo $ZONE | jq 'has("VPCs")')
    VPCs=$(echo $ZONE | jq ".VPCs")
    if [ "$hasVPCs" == true ]
    then
      VPC=$(echo $VPCs | jq ".[] | select(.VPCId == \"$1\")")
      if [ -n "$VPC" ]
      then
        HOSTED_ZONE=$(echo $REPLY | sed 's/^\/hostedzone\///g')
      fi
    fi
  done < <(echo $ZONE_IDS | jq -r '.[]')

  echo $HOSTED_ZONE
}

Called with:

ZONE_ID=$(getHostedZone $VPC_ID $EC2_REGION)

Upvotes: 0

Related Questions