Automated Backup Of AWS Route 53 Record Sets
cli53 – Command line tool for Amazon Route 53
If you’re using AWS Route 53 to manage DNS records, it’s a good idea to backup in case of accidental deletion and other such misfortunes. Of course you’ll want it automated so here’s a way to do with cron on a linux system: Install the AWS Command Line Interface. This tool allows you to administer your various AWS services via the command line.
- Install cli53 (direct link). This tool extends the AWS CLI by offering more high-level commands for easy Route 53 administration
- Once you have those setup, the following command will export a zone record to a file:
$ cli53 export example.com --file example.com.bk
- You need to specify what domain you want the zone record for, there’s no “all” option. So, you could go ahead an run the command repeatedly for all your domains, but who wants to do that? To do it programmatically, this following command will get the list of domains, iterate through them, and export each one, piping the result to a separate file:
$ cli53 list | grep 'Name:*' | cut -f6- -d' ' | while read line; do cli53 export ${line} >> ~/backup/${line}bk; done
- To have this happen automatically, you can simply create a bash script and have cron run it once per day or whatever you like:
$ cli53 list | grep 'Name:*' | cut -f6- -d' ' | while read line; do cli53 export${line} >> ~/backup/${line}bk; done
Note: You may need to make sure that the path to the
cli53
binary is preceding your shells$PATH
environment variable. One method of doing this is to addPATH="/usr/local/bin:$PATH"
to the top of your.bashrc
file. - Save it, let’s say to /path/to/script.sh, make that file executable, and add it to cron:
$ crontab -e
Add this to the bottom of the file to run the script once per day:
00 00 * * * sh /path/to/script.sh
Note that your backups will be overwritten each time the script runs, so you might add a date to the file name to create daily snapshots.Or better still: why not upload your backup files to a versioned S3 bucket for safe storage? That also be done with AWS CLI, here’s a modified version of the bash script to do just that:
cli53 list | grep 'Name:*' | cut -f6- -d' ' | while read line; do cli53 export${line} > ~/backup/${line}bk; aws s3 cp ~/backup/${line}bk s3://mybucket; rm ~/backup/${line}bk; done
October 6, 2017 6:28 pm @ 18:28
Did the output change? I had to modify your script to run like this:
cli53 list | awk ‘{print $2}’ | grep -v Name | while read line; do cli53 export ${line} > ~/backup/${line}bk; done
April 13, 2020 7:10 pm @ 19:10
Thank you @@uslacker99:disqus. This was very helpful!