Route 53 のレコードを S3 に定期バックアップする

AWS

Route 53 の設定を定期的に S3 バックアップする仕組みが構築できたため、使用したツールやスクリプトを紹介します。
AWS Lambda への実装も考えられますが、今回はサーバ上での定期実行としています。

S3 バケット作成

まずはバックアップ格納先の S3 バケットを用意します。
バケット内に Route 53 専用のディレクトリを作成しました。

Route53バックアップ用のS3バケット

S3 書き込みポリシー作成

必要なディレクトリにのみ書き込める権限を用意します。
以下のような IAM ポリシーを s3-backup_route53 として作成しました。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::hoge-backup/route53/*"
        }
    ]
}

IAM ユーザ作成

スクリプトが利用するためのユーザを作成します。
route53-backup というユーザ名で、以下2つの権限を付与しました。

  • AmazonRoute53ReadOnlyAccess ※Route 53 の読み取り用
  • s3-backup_route53 ※S3 の書き込み用

Route 53バックアップ用のIAMユーザとポリシー

AWS プロファイル登録

作成した IAM ユーザのアクセスキーを任意のサーバに登録します。
今回は明示的に route53-backup という名称でプロファイル保存しています。

$ aws configure --profile route53-backup
AWS Access Key ID [None]: AKIAIXXXXXXXXXXXXXX
AWS Secret Access Key [None]: HTFqyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
Default region name [None]: ap-northeast-1
Default output format [None]: json

cli53 準備

Route 53 をコマンドから操作するツール「cli53」を活用します。
Releases ページ から環境に適合したファイルを選んでダウンロードしてきます。

$ sudo wget -O /usr/local/bin/cli53 https://github.com/barnybug/cli53/releases/download/0.8.12/cli53-linux-amd64
$ sudo chmod +x /usr/local/bin/cli53

$ cli53 -v
cli53 version 0.8.12

先ほど登録した AWS プロファイルが利用できるかテストします。Route 53 で管理しているゾーンが取得できれば OK です。

$ cli53 list --profile route53-backup
ID        Name         Record count Comment
ZS5XXXXX  yuu26.com.   16
Z2DXXXXX  hoge.local.  3

バックアップスクリプト作成

全レコードをバックアップするためにスクリプトを作成します。

初めにゾーン一覧を取得した後、レコード内容をテキストファイルに書き出す仕様としました。
これらを S3 に転送するまでがスクリプトの処理です。

バックアップ先/
  ├ _zone-list.txt  ←ゾーン一覧
  ├ yuu26.com.    ← yuu26.com. の全レコード
  └ hoge.local.    ← hoge.local. の全レコード

S3 転送結果確認

スクリプト実行後、S3 に格納されたことを確認します。
問題がなければ cron 等で定期実行の設定をして完了となります。

Route 53のゾーン情報をS3にバックアップ

参考リンク

まとめ

  • Route 53 のバックアップを自動化しました
  • Route 53 をコマンド操作するツール「cli53」を活用しました
  • 取得したファイルは S3 に格納しています

冒頭に書きましたが Lambda 上で定期実行させたり、そもそも Route 53 の設定自体を Git 等でバージョン管理すると、よりスマートかもしれません。