Created
July 15, 2015 22:04
-
-
Save justinclayton/0a4df1c85e4aaf6dde52 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 -eo pipefail | |
## Allows for creation of "Basic" DNS records in a Route53 hosted zone | |
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:-300} | |
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=300" | |
echo " - record_type=A" | |
echo " - wait_for_sync=false" | |
echo "" | |
} | |
main $1 $2 |
Hi,
I have to update more than 1000 PTR records. What changes needs o above code ??
Awesome work!
I'd recommend to use UPSERT action. In this case non-existing records will be created. Existing records will get updated.
action=${action:-UPSERT}
The script is pretty useful! Thanks!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@inscrutabledude
I believe you need to export it before running the script.