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: the cli53command won’t work in a bash script unless you provide the full path or add to the $PATH
    variable e.g /usr/local/bin/cli53

  5. Save it, let’s say to /path/to/script.sh, make that file executeable, 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

Share
Disqus Comments Loading...

Recent Posts

FreeNAS Error Creating Pool

command '('gpart', 'create', '-s', 'gpt', '/dev/da8')' returned non-zero exit status 1. If you get this error while trying to create… Read More

June 7, 2019 3:44 pm 15:44

Change Grub Default Boot Entry on Linux Mint

I'm dual booting Windows and Linux Mint on my laptop. The grub default is to boot into Linux Mint, however… Read More

April 23, 2019 7:45 pm 19:45

How to Reset Secure Channel On Active Directory Domain Controller

When you're a little too careless about virtualizing your domain controllers, cloning, migrating, backing up and restoring, returning from vacation… Read More

April 21, 2019 8:14 am 08:14

Run Systemd Script Before System Shutdown

I tried to retain the NGINX FastCGI cache and have it persist across system reboots instead of being ephemeral by… Read More

April 20, 2019 10:14 am 10:14

Learn Systemctl Usage to Manage Systemd Service in Linux

Systemd is new service manager for Linux. It's a replacement for all previous init systems (SysV/SysVinit & Ubuntu's Upstart) and… Read More

April 20, 2019 7:55 am 07:55

Force Delete Windows Server DHCP Failover Relationship

If you've found yourself here then chances are you messed up one of your domain controllers or at least one… Read More

April 20, 2019 5:54 am 05:54