【Amazon Route53】AWS CLIで特定文字列レコードを抽出してみた
こんにちは。kisaragi です。
この記事はNHN テコラスAdvent Calendar 2023の5日目の記事です。
この記事では、AWS CLI で Route53 の情報を取得する過程を解説します。
この記事で何が得られる?
192.168.0.*
のように、特定のレコード情報がほしい・・・!
しかし、レコードがたくさんあっていちいち確認するのは大変だ・・・
そういった時、解決できる方法をわかりやすく解説していきます。
前提
- Amazon Linux 2
- AWS CLI 接続できること
- READ 権限があること
- jq が使える環境
jqとは?
- json データの加工・フィルターが行えるコマンド
jqの準備
今回は Amazon linux 2 環境下にインストールします。
環境によっては yum ではなく、apt のようにインストールコマンドが異なりますので、ご注意ください。
$ sudo yum -y install epel-release $ sudo yum -y install jq $ jq --version jq-1.5
AWS CLI で Route53 の情報を取得してみよう
AWS CLI で使える Route53 のコマンドは こちらをご覧ください。
この記事では、Route53 の情報を取得するために以下2つのコマンドを使用していきます。
list-hosted-zones
Route53のホストゾーンの一覧を取得
$ aws route53 list-hosted-zones | jq -C
jq -C オプションで色つき出力をしたらもっとわかりやすくなりました。
今回は画像のホストゾーンの Id を取得する必要がございます。
Route53のホストゾーンのIdを取得
$ aws route53 list-hosted-zones | jq -r ".HostedZones[] | .Id"
jq -r オプションで RAW 出力をしたら""
に囲まれていない値として取得できます。
jq -rを使用しない場合:"/hostedzone/Z062*************9ZJ7"
jq -rを使用した場合:/hostedzone/Z062*************9ZJ7
取得したホストゾーン Id は後で使います。
list-resource-record-sets
ホストゾーンのレコード情報を取得
$ aws route53 list-resource-record-sets --hosted-zone-id Z062*************9ZJ7 | jq '.ResourceRecordSets[]' # Z062*************9ZJ7には先ほど取得したホストゾーンのIdを入力してください。
ホストゾーンのレコード一覧が取得できました。
今回は画像のValueのみ取得する必要がございます。
ホストゾーンのレコードのValueのみ取得
$ aws route53 list-resource-record-sets --hosted-zone-id Z062*************9ZJ7 | jq -c '.ResourceRecordSets[] | .ResourceRecords'
jq -c オプションでコンパクト出力をしたら、改行やインデント無しのコンパクト形式で出力できます。
* エイリアスレコードの場合はnullが出力されます。エイリアスレコードに関しては後述します。
特定のIPアドレスを持つレコードを抽出してみよう
$ aws route53 list-resource-record-sets --hosted-zone-id Z062*************9ZJ7 | jq -c '.ResourceRecordSets[] | select(.ResourceRecords[]?.Value | test("192.168.0.*"))' # 192.168.0.*には取得したい文字列を入れてください。
▼ レコードから192.168.0.*
という条件に合うレコードのみ取得できました。
エイリアスレコードに関して
エイリアスレコードは画像のようにjsonの形が異なりますので、ご注意ください。
一般レコード:ResourceRecordsとValue
エイリアスレコード:AliasTargetとDNSName
$ aws route53 list-resource-record-sets --hosted-zone-id Z062*************9ZJ7 | jq '.ResourceRecordSets[] | .AliasTarget.DNSName // .ResourceRecords[].Value' # .AliasTarget.DNSNameの値がnullの場合、.ResourceRecords[].Valueの値を代入する
▼ 上記のような書き方をすることで、エイリアスレコードも同時に処理可能になります。
複数の Route53 の情報を取得してみよう
今まで、1つのホストゾーンに対して情報を取得する方法を学びました。
しかし、ホストゾーンが300個だった場合、どうしたらいいでしょうか。
この記事では、ワンライナーで解決した方法を紹介します。
今回は3つのホストゾーンで説明します。
$ for Zoneid in $(aws route53 list-hosted-zones --query "HostedZones[].Id" --output text); do aws route53 list-resource-record-sets --hosted-zone-id $Zoneid | jq -c '.ResourceRecordSets[] | select(.AliasTarget.DNSName // .ResourceRecords[].Value | test("192.168.0.*"))'; done # 192.168.0.*には取得したい文字列を入れてください。
example1.com
example2.com
example3.com
複数のホストゾーンから特定のレコードを取得できました。
他の文字列でも抽出可能です。
$ for Zoneid in $(aws route53 list-hosted-zones --query "HostedZones[].Id" --output text); do aws route53 list-resource-record-sets --hosted-zone-id $Zoneid | jq -c '.ResourceRecordSets[] | select(.AliasTarget.DNSName // .ResourceRecords[].Value | test("hello"))'; done # Valueがhelloのレコードを抽出
$ for Zoneid in $(aws route53 list-hosted-zones --query "HostedZones[].Id" --output text); do aws route53 list-resource-record-sets --hosted-zone-id $Zoneid | jq '.ResourceRecordSets[] | select(.AliasTarget.DNSName // .ResourceRecords[].Value | test("elb"))'; done # ELBのエイリアスレコードを抽出
最後に
ドメインを Route53 で運用していたら、ホストゾーンもレコードもたくさんできてしまいますね。
そうなると、レコードの管理も大変になってしまいます。
今回は AWS CLI を使うことで手間がかかる作業を簡単に解決してみました。
Route53 のレコード取得で悩んでいる方々に少しでも役に立てれば嬉しいです。
テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!
Follow @twitter2024 Japan AWS Jr. Champions
2023年度新卒入社。出身は韓国です。
Recommends
こちらもおすすめ
-
AWSの構成図を「はやく」「きれいに」作る5つのコツ
2023.12.3
-
AWS re:Invent 2023に行ってきました!
2023.12.9
-
ひとりぼっちのPostgreSQLカンファレンスの感想
2023.12.24
-
Amazon WorkMailのセットアップガイド: 独自ドメインを使用した手順
2024.3.14
-
エンジニアとして働く上で大切にしているマインド
2023.12.21
Special Topics
注目記事はこちら
データ分析入門
これから始めるBigQuery基礎知識
2024.02.28
AWSの料金が 10 %割引になる!
『AWSの請求代行リセールサービス』
2024.07.16