【AWS CLI】Route 53の情報出力編

記事タイトルとURLをコピーする

こんにちは。AWS CLIが好きな福島です。

はじめに

今回は、Route53 関連の情報を取得する方法をご紹介いたします。

利用するコマンド,サブコマンド

まず、AWS CLIの構造は以下の通りです。

aws <command> <subcommand> [options and parameters]

上記を前提に今回使う <command>,<subcommand>は、以下の通りです。

<command>

route53  

<subcommand>

* list-hosted-zones
 ⇒ホストゾーンの一覧を出力するコマンド
* list-resource-record-sets
 ⇒レコード一覧を出力するコマンド

ホストゾーンの一覧

  • 実行コマンド

ヘッダーなし

aws route53 list-hosted-zones --query "HostedZones[].[Name,Id,Config.PrivateZone,ResourceRecordSetCount]" --output text

ヘッダー付き

# echo "Name,Id,PrivateZone,ResourceRecordSetCount" > /tmp/awscli.tmp ;\
aws route53 list-hosted-zones --query "HostedZones[].[Name,Id,Config.PrivateZone,ResourceRecordSetCount]" --output text | tr "\t" "\," >> /tmp/awscli.tmp ;\
column -s, -t /tmp/awscli.tmp
  • 実行例

ヘッダーなし

 #  aws route53 list-hosted-zones --query "HostedZones[].[Name,Id,Config.PrivateZone,ResourceRecordSetCount]" --output text
dev.example.com.   /hostedzone/Z06346771NQ9TTU22V2AU       False   16
fk-test-private.com.    /hostedzone/Z0434480BVBQ2RX5253A        True    4

ヘッダー付き

# echo "Name,Id,PrivateZone,ResourceRecordSetCount" > /tmp/awscli.tmp ;\
> aws route53 list-hosted-zones --query "HostedZones[].[Name,Id,Config.PrivateZone,ResourceRecordSetCount]" --output text | tr "\t" "\," >> /tmp/awscli.tmp ;\
> column -s, -t /tmp/awscli.tmp
Name                   Id                                 PrivateZone  ResourceRecordSetCount
dev.example.com.   /hostedzone/Z06346771NQ9TTU22V2AU       False   16
fk-test-private.com.    /hostedzone/Z0434480BVBQ2RX5253A        True    4

レコードの一覧

  • 実行コマンド
hosted_zone_id="ホストゾーンのIDを指定します。"
aws route53 list-resource-record-sets \
--hosted-zone-id ${hosted_zone_id} \
--query "ResourceRecordSets[].[Name,Type,AliasTarget.DNSName,AliasTarget.EvaluateTargetHealth,ResourceRecords[0].Value,ResourceRecords[1].Value,ResourceRecords[2].Value,ResourceRecords[3].Value]" --output text
  • 実行例
hosted_zone_id="/hostedzone/Z0434480BVBQ2RX5253A"
# aws route53 list-resource-record-sets \
> --hosted-zone-id ${hosted_zone_id} \
> --query "ResourceRecordSets[].[Name,Type,AliasTarget.DNSName,AliasTarget.EvaluateTargetHealth,ResourceRecords[0].Value,ResourceRecords[1].Value,ResourceRecords[2].Value,ResourceRecords[3].Value]" --output text
fk-test-private.com.    NS      None    None    ns1.example.com.                                                         ns2.example.com.  ns3.example.com.  ns4.example.com.
fk-test-private.com.    SOA     None    None    ns1.example.com. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400 None    None    None
test.fk-test-private.com.       A       None    None    1.1.1.1 None    None    None

全ホストゾーンのレコード一覧

  • 実行コマンド
aws route53 list-hosted-zones --query "HostedZones[].[Id,Name]"  --output text | while read line
do   
   hosted_zone_id=$(echo $line | awk '{print $1}')
   hosted_zone_name=$(echo $line | awk '{print $2}')
   echo "############################ "
   echo "#### ${hosted_zone_name}"
   echo "############################ "
   echo "Name,Type,DNSName,EvaluateTargetHealth,ResourceRecords[0],ResourceRecords[1],ResourceRecords[2],ResourceRecords[3]" > /tmp/awscli.tmp
   aws route53 list-resource-record-sets --hosted-zone-id ${hosted_zone_id} \
   --query "ResourceRecordSets[].[Name,Type,AliasTarget.DNSName,AliasTarget.EvaluateTargetHealth,ResourceRecords[0].Value,ResourceRecords[1].Value,ResourceRecords[2].Value,ResourceRecords[3].Value]" --output text \
   | tr "\t" "," >> /tmp/awscli.tmp
   column -s, -t /tmp/awscli.tmp
done 
  • 実行例
 #  aws route53 list-hosted-zones --query "HostedZones[].[Id,Name]"  --output text | while read line
> do
>    hosted_zone_id=$(echo $line | awk '{print $1}')
>    hosted_zone_name=$(echo $line | awk '{print $2}')
>    echo "############################ "
>    echo "#### ${hosted_zone_name}"
>    echo "############################ "
>    echo "Name,Type,DNSName,EvaluateTargetHealth,ResourceRecords[0],ResourceRecords[1],ResourceRecords[2],ResourceRecords[3]" > /tmp/awscli.tmp
>    aws route53 list-resource-record-sets --hosted-zone-id ${hosted_zone_id} \
>    --query "ResourceRecordSets[].[Name,Type,AliasTarget.DNSName,AliasTarget.EvaluateTargetHealth,ResourceRecords[0].Value,ResourceRecords[1].Value,ResourceRecords[2].Value,ResourceRecords[3].Value]" --output text \
>    | tr "\t" "," >> /tmp/awscli.tmp
>    column -s, -t /tmp/awscli.tmp
> done
############################
#### example.com.
############################
Name                                                          Type   DNSName                                                    EvaluateTargetHealth  ResourceRecords[0]                                                            ResourceRecords[1]        ResourceRecords[2]      ResourceRecords[3]
example.com.                                              A      fk-test-alb2-xxxxx.ap-northeast-1.elb.amazonaws.com.  False                 None                                                                          None                      None                    None
example.com.                                              NS     None                                                       None                  ns1.example.com.                                                         ns2.example.com.  ns3.example.com.  ns4.example.com.
example.com.                                              SOA    None                                                       None                  ns1.example.com. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400  None                      None                    None
############################
#### dev.example.com.
############################
Name                       Type  DNSName  EvaluateTargetHealth  ResourceRecords[0]                                                               ResourceRecords[1]     ResourceRecords[2]      ResourceRecords[3]
dev.example.com.       NS    None     None                  ns1.example.com.                                                         ns2.example.com.  ns3.example.com.  ns4.example.com.
dev.example.com.       SOA   None     None                  ns1.example.com. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400  None                   None                    None
test.dev.example.com.  A     None     None                  1.1.1.1                                                                          None                   None                    None

おまけ

ホストゾーンを先頭に列に追加するバージョン。

  • 実行コマンド
echo "HostZoneName,Name,Type,DNSName,EvaluateTargetHealth,ResourceRecords[0],ResourceRecords[1],ResourceRecords[2],ResourceRecords[3]" ;\
aws route53 list-hosted-zones --query "HostedZones[].[Id,Name]"  --output text | while read line
do   
   hosted_zone_id=$(echo $line | awk '{print $1}')
   hosted_zone_name=$(echo $line | awk '{print $2}')
   aws route53 list-resource-record-sets --hosted-zone-id ${hosted_zone_id} \
   --query "ResourceRecordSets[].[Name,Type,AliasTarget.DNSName,AliasTarget.EvaluateTargetHealth,ResourceRecords[0].Value,ResourceRecords[1].Value,ResourceRecords[2].Value,ResourceRecords[3].Value]" --output text \
   | tr "\t" "," > /tmp/awscli.tmp
   awk -v h=${hosted_zone_name} '{print h,",",$1}' /tmp/awscli.tmp | sed 's/ , /,/g'
done 
  • 実行例
HostZoneName,Name,Type,DNSName,EvaluateTargetHealth,ResourceRecords[0],ResourceRecords[1],ResourceRecords[2],ResourceRecords[3]
example.com.,example.com.,A,fk-test-alb2-xxxxx.ap-northeast-1.elb.amazonaws.com.,False,None,None,None,None
example.com.,example.com.,NS,None,None,ns1.example.com.,ns2.example.com.,ns3.example.com.,ns4.example.com.
example.com.,example.com.,SOA,None,None,ns1.example.com.,awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400,None,None,None
dev.example.com.,dev.example.com.,NS,None,None,ns1.example.com.,ns2.example.com.  ns3.example.com.  ns4.example.com.
dev.example.com.,dev.example.com.,SOA,None,None,ns1.example.com.,awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400,None,None,None
dev.example.com.,test.dev.example.com.,A,None,None,1.1.1.1,None,None,None

終わりに

今回は、AWS CLIを使ってRoute 53の情報を出力するコマンドをご紹介いたしました。
どなかたのお役に立てれば幸いです。

福島 和弥 (記事一覧)

2019/10 入社

AWS CLIが好きです。

AWS資格12冠。2023 Japan AWS Partner Ambassador/APN ALL AWS Certifications Engineer。