-
-
Save AstroTom/c83707a3b6fe71d36d70bd02e6a2a015 to your computer and use it in GitHub Desktop.
CLI to add DNS Records in Route53
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
set -eo pipefail | |
## Allows for creation of "Basic" DNS records in a Route53 hosted zone | |
# Make sure all output is in json | |
export AWS_DEFAULT_OUTPUT=json | |
function main() { | |
record_name=$1 | |
record_value=$2 | |
[[ -z $record_name ]] && echo "record_name is: $record_name" && exit 1 | |
[[ -z $record_value ]] && echo "record_value is: $record_value" && exit 1 | |
## set some defaults if variables haven't been overridden on script execute | |
zone_name=${zone_name:-$ROUTE53_DEFAULT_HOSTED_ZONE_NAME} | |
action=${action:-CREATE} | |
record_type=${record_type:-A} | |
ttl=${ttl:-60} | |
wait_for_sync=${wait_for_sync:-false} | |
change_id=$(submit_resource_record_change_set) || exit 1 | |
echo "Record change submitted! Change Id: $change_id" | |
if $wait_for_sync; then | |
echo -n "Waiting for all Route53 DNS to be in sync..." | |
until [[ $(get_change_status $change_id) == "INSYNC" ]]; do | |
echo -n "." | |
sleep 5 | |
done | |
echo "!" | |
echo "Your record change has now propogated." | |
fi | |
echo 'Thank you for using "The Cloud".' | |
} | |
function change_batch() { | |
jq -c -n "{\"Changes\": [{\"Action\": \"$action\", \"ResourceRecordSet\": {\"Name\": \"$record_name\", \"Type\": \"$record_type\", \"TTL\": $ttl, \"ResourceRecords\": [{\"Value\": \"$record_value\"} ] } } ] }" | |
} | |
function get_change_status() { | |
aws route53 get-change --id $1 | jq -r '.ChangeInfo.Status' | |
} | |
function hosted_zone_id() { | |
aws route53 list-hosted-zones | jq -r ".HostedZones[] | select(.Name == \"${zone_name}\") | .Id" | cut -d'/' -f3 | |
} | |
function submit_resource_record_change_set() { | |
aws route53 change-resource-record-sets --hosted-zone-id $(hosted_zone_id) --change-batch $(change_batch) | jq -r '.ChangeInfo.Id' | cut -d'/' -f3 | |
} | |
function usage() { | |
echo "usage: $0 <record_name> <record_value>" | |
echo "" | |
echo "possible env config settings and their defaults:" | |
echo " - action=CREATE" | |
echo " - ttl=60" | |
echo " - record_type=A" | |
echo " - wait_for_sync=false" | |
echo " - zone_name=\$ROUTE53_DEFAULT_HOSTED_ZONE_NAME" | |
echo "" | |
} | |
if [[ $# != 2 ]] | |
then | |
echo "Error: Wrong no. of args" | |
usage | |
exit 2 | |
fi | |
main $1 $2 |
OPTIONAL: use UPSERT action. In this case non-existing records will be created. Existing records will get updated.
action=${action:-UPSERT}
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Be sure to add dot "." at end of zone_name