コマンドラインでRoute 53を操作したい
プロフェッショナルサービス課の杉村です。既存のDNSサーバRoute 53に移行したいときなど、一度にたくさんのゾーンとレコードをRoute 53に登録したいケースがあると思います。
残念ながらRoute 53関連のAWS CLIやAWS Tools for PowerShellはあまり充実しておらず、手慣れたBashやPowerShellでスクリプトを書こうとしても壁にあたってしまいます。
そこでgithubで公開されているcli53というツールを使ってみることにしました。
cli53
https://github.com/barnybug/cli53
Readmeに従ってダウンロードしたバイナリをそのまま実行すれば使えます。Windows版、Mac版、Linux版があるようです。
コマンドラインは同じと思いますが、この記事ではLinux上で動かす前提で解説していきたいと思います。
一度にたくさんのHosted Zoneを作成する
ここからの解説ではIAMクレデンシャルが環境変数や~/.aws/credentialsに設定済みである前提でお話していきます。
まずはHosted Zoneを作成するコマンドを実行してみます。Private Hosted Zoneの場合は以下です。簡単ですね!
cli53 create --vpc-id ${VPC_ID} --vpc-region ap-northeast-1 ${DOMAIN_NAME}
Public Hosted Zoneの場合はもう少し考慮が必要です。Hosted Zoneを作成すると、以下のような具合でNSレコードが4つ予め登録されてある状態でZoneが作成されます。
ns-2048.awsdns-64.com
ns-2049.awsdns-65.net
ns-2050.awsdns-66.org
ns-2051.awsdns-67.co.uk
これらのDNSサーバはHosted Zoneを作成するたびにランダムに割り当てられるため、一度に何十ものHosted Zoneを作成すると、何十通りものNSレコードができあがることになります。
そんなことになると、上位レジストラにドメインを登録する際に、ドメインごとに違うNSレコードを指定するはめになり、とても大変です。
この問題を解決するために、Route 53にはReusable Delegation Setsという仕組みがあります。一度Delegation Setを作成すると、そのSetに4つのDNSサーバが割り当てられます。Public Hosted Zoneを作成するときにそのDelegation Setを指定すれば、同じ4つのNSレコードを持つHosted Zoneが作成できるのです。
cli53でDelegation Set作成し、そのSetを指定してPublic Hosted Zoneを作成してみましょう。
$ cli53 dscreate
Created reusable delegation set ID: '/delegationset/N1V5DT8LUXWE7U'
Nameserver: ns-923.awsdns-51.net
Nameserver: ns-1284.awsdns-32.org
Nameserver: ns-1964.awsdns-53.co.uk
Nameserver: ns-342.awsdns-42.com
$ cli53 dslist
Reusable delegation sets:
- ID: /delegationset/N1V5DT8LUXWE7U Nameservers: ns-923.awsdns-51.net, ns-1284.awsdns-32.org, ns-196
4.awsdns-53.co.uk, ns-342.awsdns-42.com
これだけです。(後者のコマンドは確認用です)Delegation Setを作成すると「/delegationset/1A2B3C4D5E6F7G」のようなIDが割り当てられます。このIDを指定してPublic Hosted Zoneを作成します。なお削除は「cli53 dsdelete ${DELEGATIONSET_ID}」で可能です。
それでは実際にPublic Hosted Zoneを作成してみましょう。
cli53 create --delegation-set-id ${DELEGATIONSET_ID} ${DOMAIN_NAME}
ループを回せば、一度に大量のHosted Zoneを作成することが可能ですね。
なお細かいRoute 53の制限として、Private Hosted Zoneではサブドメインの委任をすることができません。(Publicでは可能です)例えばexample.comとsub.example.comの2つのドメインのHosted Zoneを作成するとします。Public Hosted Zoneではサブドメインのゾーンを作成することが可能ですが、Private Hosted Zoneでは不可能です。example.comが存在すると、それ以下のサブドメインのゾーンを作成しようとするとエラーになります。example.comのゾーンの中にレコードを登録するしかありません。
ゾーンファイルをインポートする
以下のコマンドでゾーンファイルを簡単にインポートできます。cli53 import --file ${ZONE_FILE} ${HOSTED_ZONE}
なお${HOSTED_ZONE}としている部分は、Hosted ZoneのDomain NameでもHosted Zone IDでも、どちらでも可です。万が一同じZone名をもつPublic Hosted ZoneとPrivate Hosted Zoneが同じアカウントに共存している場合、ドメイン名の指定ではエラーになってしまうので、Zone IDを用いて指定します。
杉村 勇馬 (記事一覧)
サーバーワークス → 株式会社G-gen 執行役員CTO
2021 Japan APN Ambassadors / 2021 APN All AWS Certifications Engineers
マルチAWSアカウント管理運用やネットワーク関係のAWSサービスに関するブログ記事を過去に執筆。
2021年09月から株式会社G-genに出向、Google Cloud(GCP)が専門に。G-genでもGoogle Cloud (GCP) の技術ブログを執筆中。