Amazon Route 53(DNSサービス)にBINDゾーンファイルをインポートする
AWSのスケーラビリティを最も享受できるサービスは、Route 53(DNS)とCloudFront(CDN)だと個人的には考えています。Route 53は、世界中に散在するAWSのデータセンター(エッジロケーションと言います)で稼働するDNSサーバーを利用する、SLA100%の超スケーラブル&高信頼なDNSサービスです。1ゾーン(ドメイン)を月額0.5ドル+α(リクエスト従量)で利用できます。
Route 53は、AWS環境専用のDNSサービスだと誤解されがちですが、オンプレミスのホスト情報など非AWS用のDNSサーバーとしても利用することが可能です。「ハイリスクで面倒なDNSサーバーの管理から解放されたい!」というインフラ管理者にも、Route 53は有効な選択肢として検討していただきたいサービスです。
ただ、Route 53も他のAWSのサービスと同様に、設定の投入はブラウザベースの管理画面(Management Console)もしくはWeb API経由で行わなくてはなりません。既存のBIND DNSサーバーがあり、大量のリソースレコードを持つときにはRoute 53のインポート機能を使うと便利です。以下に手順と注意点を紹介します。
1. ゾーンの作成
Route 53でインポートしたいゾーンは、AWS Management ConsoleのRoute 53の管理画面で事前に作成しておきます。正引きゾーン、逆引きゾーン *1ともに作成可能です。
2. ゾーンデータのインポート
ゾーン管理画面の上部にある[Import Zone File]ボタンをクリックすると、ゾーンデータをペーストするテキストエリアが表示されます。インポートしたいゾーンデータをテキストエリアにコピー&ペーストし、[Import]ボタンをクリックしインポート完了です。
インポートの制限事項
- インポートして登録するレコードの上限は、1000です。
- ゾーンのSOAレコード、NSレコードはゾーン作成時にRoute 53用の値がセットされるため、インポートするゾーンデータに含まれるSOAレコード、NSレコードは無視されます(エラーにはなりません)。
【注意】$GENERATEがエラーになるので"ひと手間"かける
$GENERATEは、大量の連番レコードを生成するBINDゾーンファイルの記法です。現状では、Route 53のインポートではサポートされません。ゾーンデータに$GENERATEを含んでいると、インポート時に以下のようにエラーになります。
これを回避するためには、事前に$GENERATEを展開したゾーンデータを準備します。BINDのユーティリティに含まれるnamed-compilezoneコマンドを使用するのが手っ取り早いです。named-compilezoneコマンドは、BIND(Amazon Linuxでは、bindパッケージ)と一緒にインストールされます。手元のOSXには既にインストール済みでした。
named-compilezone -o <出力するゾーンファイル名> <ゾーン名> <元のゾーンファイル名>
$ named-compilezone -o example_com_compiled.zone example.com example_com.zone zone example.com/IN: loaded serial 0 dump zone to example_com_compiled.zone...done OK $
example_com.zone(元のゾーンファイル)
$TTL 1D @ IN SOA @ rname.invalid. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS @ A 192.168.1.250 $GENERATE 1-30 www$ A 192.168.1.$
example_com_compiled.zone(展開後のゾーンファイル)
example.com. 86400 IN SOA example.com. rname.invalid. 0 86400 3600 604800 10800 example.com. 86400 IN NS example.com. example.com. 86400 IN A 192.168.1.250 www1.example.com. 86400 IN A 192.168.1.1 www10.example.com. 86400 IN A 192.168.1.10 www11.example.com. 86400 IN A 192.168.1.11 www12.example.com. 86400 IN A 192.168.1.12 www13.example.com. 86400 IN A 192.168.1.13 www14.example.com. 86400 IN A 192.168.1.14 :
展開後のゾーンデータをコピー&ペーストし、[Import]ボタンをクリックすると、インポートできました。レコード一覧は以下のような感じです。
登録できていますね。
3. 動作確認
Route 53のDNSサーバーに直接問い合わせて、登録を確認してみます。digコマンドやhostコマンドで、ゾーンのNSレコードに登録されているRoute 53のDNSサーバー *2に問い合わせてみます。
$ host www1.example.com ns-AAA.awsdns-EE.com. Using domain server: Name: ns-AAA.awsdns-EE.com. Address: XXX.XXX.XXX.XXX#53 Aliases: www1.example.com has address 192.168.1.1 $
$ dig @ns-AAA.awsdns-EE.com. www1.example.com
; <<>> DiG 9.8.3-P1 <<>> @ns-AAA.awsdns-EE.com. www1.example.com ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12031 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 0 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;www1.example.com. IN A ;; ANSWER SECTION: www1.example.com. 86400 IN A 192.168.1.1 ;; AUTHORITY SECTION: example.com. 172800 IN NS ns-AAA.awsdns-EE.org. example.com. 172800 IN NS ns-BBB.awsdns-FF.co.uk. example.com. 172800 IN NS ns-CCC.awsdns-GG.com. example.com. 172800 IN NS ns-DDD.awsdns-FF.net. ;; Query time: 82 msec ;; SERVER: XXX.XXX.XXX.XXX#53(XXX.XXX.XXX.XXX) ;; WHEN: Sun Aug 18 23:24:04 2013 ;; MSG SIZE rcvd: 187 $ [/bash]
正常な応答がありますね!
まとめ
BINDのゾーンファイルをRoute 53にインポートする方法をご紹介しました。
既存のBIND環境で大量のレコードを持つ場合でも、Route 53に簡単に移行できることがお分かりいただけたと思います。Route 53をぜひご活用ください!