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.

  1. Install cli53 (direct link). This tool extends the AWS CLI by offering more high-level commands for easy Route 53 administration
  2. Once you have those setup, the following command will export a zone record to a file:
    $ cli53 export example.com --file example.com.bk
  3. 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
  4. 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 add PATH="/usr/local/bin:$PATH" to the top of your .bashrc file.

  5. 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

Tags: cli53
Disqus Comments Loading...
All Rights ReservedRegular Version