はじめに
Route53のゾーン情報をバックアップする方法を説明します。
バックアップはBINDのゾーンファイル形式でテキスト出力されます。
Route53はゾーンファイルのインポートが可能なので、Route53を別アカウントに引っ越すことになった場合にも利用できそうです。
手段
cli53を利用します。
https://github.com/barnybug/cli53
検証環境
今回の記事を書くにあたり、以下の環境で確認を行いました。
- バックアップスクリプト実行環境
- Linux(CentOS8)
- aws cli 2.0.4
- cli53 0.8.17
- Linux(CentOS8)
- 対象のDNS
- AWS(Route53)
- パブリックホストゾーン
- プライベートホストゾーン
- AWS(Route53)
事前準備
AWS側の準備
IAMユーザの作成
Route53の情報を出力できるユーザを作成します。
今回は「AmazonRoute53ReadOnlyAccess」のポリシーをアタッチしました。
Linux(バックアップスクリプト実行)側の準備
AWS CLIのインストール
手順は省略します。
AWSの操作に問題がないかを確認するだけなので AWS CLI自体は必須ではありません。
AWS CLIの認証情報を保存
# 「Access Key ID」と「Secret Access Key」を登録します
aws configure
# Route53の情報が取得できるかを確認します
# (例)ホストしているゾーンの取得
aws route53 list-hosted-zones --query "HostedZones[*].Name" --output text
cli53のダウンロード
https://github.com/barnybug/cli53/releases/latest から最新のバイナリをダウンロードします。
wget https://github.com/barnybug/cli53/releases/download/0.8.17/cli53-linux-amd64
chmod 555 cli53-linux-amd64
mv cli53-linux-amd64 /usr/local/bin/cli53
コマンドのテスト
以下のコマンドを実行して出力結果を確認します。
cli53 export <ホストゾーン ID> または、
cli53 export <ドメイン名>
(例)
cli53 export example.com
バックアップスクリプトの作成
#!/bin/bash
# ホストされているドメインのリストを取得して変数に代入
domain_list=$(cli53 list | sed -e '1d' | awk '{print $2}')
# ドメイン毎に別ファイルでエクスポート
for i in ${domain_list}
do
cli53 export $i > /tmp/$i`date '+%Y%m%d'`.txt
done
※date でファイルに日付けを付与しています
※ファイルの保存場所は /tmp です
※複数のAWSアカウントを管理している場合はプロファイルの指定が可能です
(例)
cli53 export example.com --profile default
- --profileのオプションを使うと複数アカウントの操作が可能です。 for のループを2重に回す(domain_listの取得もループで回す)と取得ができるでしょう。
おわりに
AWS CLI(aws route53 list-resource-record-sets)で取得できるjsonやtable、yamlの形式では情報がわかりにくかったので、cli53を使用しました。
参考
Route 53 で設定した DNS レコードをエクスポートする
https://qiita.com/tmtysk/items/6ca808dd9ed13abc1992
追記
2020/03/23 domain_listをforで取得する部分を追記しました。