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


概要

Route 53 の設定を定期的に S3 バックアップする仕組みが構築できたため、使用したツールやスクリプトを紹介します。

AWS Lambda への実装も考えられますが、今回はサーバ上での定期実行としています。


S3 バケット作成

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

f:id:yuu2634:20180620205932p:plain


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 の書き込み用

f:id:yuu2634:20180620211634p:plain


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 ページ から環境に適合したファイルを選んでダウンロードしてきます。

# wget -O /usr/local/bin/cli53 https://github.com/barnybug/cli53/releases/download/0.8.12/cli53-linux-amd64
# 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 等で定期実行の設定をして完了となります。

f:id:yuu2634:20180620214746p:plain


参考リンク


まとめ

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

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