cli53を使ってRoute 53にゾーンファイルをインポートしてみた

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

コマンドラインで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を用いて指定します。

杉村 勇馬 (記事一覧)

クラウドインテグレーション部 技術3課 課長

マルチAWSアカウント管理運用やネットワーク関係のAWSサービスに関するブログをよく書いています

2020年10月現在、ハマっているものはポケモン ソード(遅い)