Amazon Route53を利用する上で、DNSレコード情報を一旦整理したいなと思ったんです。で、Web画面からポチポチ見てくるのもSEっぽくないなと思って、aws cliを用いたコマンドでの情報取得に挑戦しました!
AWS CLIコマンドのインストールは省略します。
AWS CLI インストールなどのキーワードで検索すれば優良なサイトがヒットしてくると思うのでそちらを参照されてください。
Amazon Route53に登録されているDNSレコードをCSVとして取得する方法
まずは、以下のコマンドを使ってRoute53で登録されているホストゾーンIDを取得する。
aws route53 list-hosted-zones --output json
そうすると、以下のような結果が出てくると思います。
{
"HostedZones": [
{
"Id": "/hostedzone/ZWDFMxxx11235",
"Name": "hogehoge.jp.",
"CallerReference": "xxxxxxA5-0xx8-xxxE-xxxF-54xxxx24ExxA",
"Config": {
"PrivateZone": false
},
"ResourceRecordSetCount": 11
},
{
"Id": "/hostedzone/Z34xxFHJ1234H",
"Name": "foofoo.com.",
"CallerReference": "B5xxxxx2D-xx32-Cxxx-9xxB-5xxxFBxxDCC4",
"Config": {
"PrivateZone": false
},
"ResourceRecordSetCount": 11
}
]
}
この中で、「”id”:~」ってなってるところがホストゾーンIDですね。
この方法で見るのも良しですし、「jq」コマンドで整形してみても良いです。
aws route53 list-hosted-zones --output json | jq -r ".HostedZones[] | .Id "
実行結果は以下のようになります。
/hostedzone/ZWDFMxxx11235
/hostedzone/Z34xxFHJ1234H
上記取得したホストゾーンIDをもとにゾーンに登録されているレコードを参照します。
DNSレコード情報を取得する方法
さて、ホストゾーンIDを確認できたら、次は下記コマンドを実行します。
ホストゾーンIDの指定方法は「/hostedzone/ホストゾーンID」でも「ホストゾーンID」でも挙動は同じです。
aws route53 list-resource-record-sets --hosted-zone-id /hostedzone/ZWDFMxxx11235 --output json
そうするとずらーーーっとレコードが表示されます。
こんな感じ↓
{
"ResourceRecordSets": [
{
"Name": "hogehoge.jp.",
"Type": "A",
"TTL": 60,
"ResourceRecords": [
{
"Value": "xxx.xxx.xxx.10"
}
]
},
{
"Name": "hogehoge.jp.",
"Type": "MX",
"TTL": 300,
"ResourceRecords": [
{
"Value": "10 mail.hogehoge.jp."
}
]
},
....省略
]
}
このまんまだと見にくいので、先程と同じようにjqコマンドを用いて整形して、CSVファイルとして出力します。
コマンドの過程を並べておくので、動作の違いはご自身で確認してください。
aws route53 list-resource-record-sets --hosted-zone-id /hostedzone/ZWDFMxxx11235 --output json | jq -r " .ResourceRecordSets"
↑このままだとうじゃーぁぁぁって情報が出てくるので、ちょっと整形↓
aws route53 list-resource-record-sets --hosted-zone-id /hostedzone/ZWDFMxxx11235 --output json | jq -r " .ResourceRecordSets | .[] | [ .Name, .Type, .TTL , ( .ResourceRecords[] | .Value )]"
↑これで、Name, Type, TTL, ResourceRecordsのValueのみが表示されるようになったけども、、それでもまだ見にくいので、もうひと手間!↓
DNSレコード情報をCSVフォーマットで出力する
jqコマンドで「@csv」って噛ますとCSV形式でフォーマットされるんです。便利~
aws route53 list-resource-record-sets --hosted-zone-id /hostedzone/ZWDFMxxx11235 --output json | jq -r " .ResourceRecordSets | .[] | [ .Name, .Type, .TTL , ( .ResourceRecords[] | .Value )] | @csv"
2024/04/10 上記だと、Route 53のレコードが Alias の場合に下記のようなエラーになる。
jq: error (at <stdin>:926): Cannot iterate over null (null)
なので、下記に変更し、リソースが null であっても対応できるように変更 ※CloudFront向けAliasレコードの対処を追加
aws route53 list-resource-record-sets --hosted-zone-id /hostedzone/ZWDFMxxx11235 --output json | jq -r ".ResourceRecordSets | .[] | [ .Name, .Type, .TTL , (if .ResourceRecords then (.ResourceRecords[] | .Value) elif .AliasTarget then .AliasTarget.DNSName else \"-\" end) ] | @csv"
実行結果はこんな感じ
"hogehoge.jp.","A",60,"xxx.xxx.xxx.10"
"alias.hogehoge.jp.","A",,"xxxxxx.cloudfront.net."
"hogehoge.jp.","MX",300,"10 mail.hogehoge.jp."
~
これでCSV形式になったので、あとは「>」使って、適当なファイルに出力すれば完了ですね!
めでたしめでたし。
参考:
https://docs.aws.amazon.com/cli/latest/reference/route53/
https://docs.aws.amazon.com/cli/latest/reference/route53/list-hosted-zones.html
https://docs.aws.amazon.com/cli/latest/reference/route53/list-resource-record-sets.html
コメント
こんにちは
大分久しぶりの投稿をされておりますね。
trippyboyさんはいかがでしょうか?
お元気でしょうか?
私は今も相変わらず零細のSEです。
ボランティアで回答してたらgoogleのエキスパートになったり
インフラ勉強会というところで勉強させていただいてるところです。
tera termの後継を引き継いだ方とお友達になったり
低レイヤを勉強中したいのですが、
基本情報の勉強となかなかうまくいかずですはい。
お久しぶりです!ヽ(=´▽`=)ノ
歳を重ねるに連れて仕事もプライベートも盛んになってブログ書いてる時間を取れていませんでした(^_^;)
無事に元気にやっております!
ボランティア回答ってかなり自分のスキルアップになりますよね。
私もyahoo知恵袋でカテゴリーマスタしてましたね〜
やはりアウトプットの場って大切ですね。
tera termの後継ぎとは、、、 ま、まさかのtera term開発者だったんですか!?驚
時代がOSSに流れてきているので、OSS loverとしては最近は嬉し楽しくSEやってます(*^^*)
開発者は寺西さんOSS化したのは
平田豊さんです。私と同じ年齢でしたw
老害にならないよう、
これからは若者に教わりながら生きていく所存です。
最近はあっちこっちの勉強会に参加する予定なんで
お会いすることがあるかもしれませんね。
そのときはどうぞよろしく。