id:kizashi1122 です。
Route53 ってレコードを備考欄がないので、コンソールから登録した場合に「これ何のためのレコードだっけ?」ということになりがちです。 IaC 化ってそういう意味でも大事ですよね。
なので、手でつくったレコードが山程あったりすると、まずは棚卸ししてそもそも目的を整理し不要なものは削除したいなとなります。。
よし、全DNSレコードをCSVでエクスポートするかって思ったところで、そんな機能はありません。
ネットで漁るとサーバーワークスさんの記事が見つかりました。
おお神!
しかし、試したところ、TXT レコードが複数行あったときにCSVが壊れることがわかりました。残念。
となると作るしかないかってことでさくっと Ruby で作りました。
require 'aws-sdk-route53' require 'csv' client = Aws::Route53::Client.new r = client.list_hosted_zones # header puts %w(zone domain type value).to_csv r.hosted_zones.each do |z| r2 = client.list_resource_record_sets(hosted_zone_id: z.id) r2.resource_record_sets.each do |rs| next if %w(SOA NS).include?(rs.type) # CSV に NS/SOA は不要 domain = rs.name.gsub('\052','*') # wildcard domain values = rs.resource_records.empty? ? [rs.alias_target&.dns_name] : rs.resource_records.map(&:value) puts [ z.name, domain, rs.type, values.join("\n") ].to_csv end end
ポイントはこんな感じです。
- 出力先は標準出力なので適宜ファイルにリダイレクトしてね
- NSレコード、SOA レコードは出力対象外としたけど適宜カスタマイズしてね
- ワイルドカードドメインはアスタリスクが
\052
に変換されて出力されてしまうので強制的に戻しています - レコード設定時に入力・選択した内容は DNSName か ResourceRecords に入ってるので値の入っているほうを採用しています
そして、今、棚卸し中です。
このレコード何のために作ったんだっけ・・・。