Amazon Route53ためしてみた

参考URL: http://docs.amazonwebservices.com/Route53/latest/GettingStartedGuide/

下準備

AWSの認証情報を ~/.aws-secrets に保存。フォーマットは
%awsSecretAccessKeys = (
    "my-aws-account" => {
        id => "0F1V9UKMN23IEXAMPLE2",
        key => "lkTwZRalREYSU7lbSS5VoUhdYREcwsasEXAMPLEQ",
    },
);

です。パーミッションを600にしておきましょう(chmod 600 ~/.aws-secrets)

dnscurl.pl をダウンロードし、実行可能属性を付けておく
~/work/r53% curl -O http://awsmedia.s3.amazonaws.com/catalog/attachments/dnscurl.pl
~/work/r53% chmod +x dnscurl.pl
PerlのDigest::HMAC_SHA1を入れておく

CPANから入れるなら、

~/work/r53% sudo perl -MCPAN -e shell
 :
 :
cpan> install Digest::HMAC_SHA1
 :
 :
  GAAS/Digest-HMAC-1.02.tar.gz
  /usr/bin/make install  -- OK
cpan>

HostedZoneを作る

createリクエストのXML(create.xml)を用意。
<CreateHostedZoneRequest xmlns="https://route53.amazonaws.com/doc/2010-10-01/">
   <Name>example.com.</Name>
   <CallerReference>r53test</CallerReference>
   <HostedZoneConfig>
      <Comment>just playing with r53</Comment>
   </HostedZoneConfig>
</CreateHostedZoneRequest>
リクエスト発行
~/work/r53% ./dnscurl.pl --keyname my-aws-account -- -H "Content-Type: text/xml; charset=UTF-8" -X POST --upload-file create.xml https://route53.amazonaws.com/2010-10-01/hostedzone
                                                                           0.0%
<?xml version="1.0"?>
<CreateHostedZoneResponse xmlns="https://route53.amazonaws.com/doc/2010-10-01/"><HostedZone><Id>/hostedzone/Z6OFCRATY6S6R</Id><Name>example.com.</Name><CallerReference>r53test</CallerReference><Config><Comment>just playing with r53</Comment></Config></HostedZone><ChangeInfo><Id>/change/C2J08T13S0L6XK</Id><Status>PENDING</Status><SubmittedAt>2010-12-07T02:29:16.554Z</SubmittedAt></ChangeInfo><DelegationSet><NameServers><NameServer>ns-1980.awsdns-55.co.uk</NameServer><NameServer>ns-1216.awsdns-24.org</NameServer><NameServer>ns-123.a

レスポンスが途中で切れてしまった…。dnscurl.plの実行時は |tee out 等として出力を保存した方がいいかもしれない。大事な情報はIdで、今回は Z6OFCRATY6S6R であった。

(追記)MacOSXのターミナルやiTermではちゃんと表示された。puttyteratermはダメだった。

状況を確認する。
~/work/r53% ./dnscurl.pl --keyname my-aws-account -- https://route53.amazonaws.com/2010-10-01/hostedzone/Z6OFCRATY6S6R | tee out
~/work/r53% less out
<?xml version="1.0"?>
<GetHostedZoneResponse xmlns="https://route53.amazonaws.com/doc/2010-10-01/"><HostedZone><Id>/hostedzone/Z6OFCRATY6S6R</Id><Name>example.com.</Name><CallerReference>r53test</CallerReference><Config><Comment>just playing with r53</Comment></Config></HostedZone><DelegationSet><NameServers><NameServer>ns-1980.awsdns-55.co.uk</NameServer><NameServer>ns-1216.awsdns-24.org</NameServer><NameServer>ns-123.awsdns-15.com</NameServer><NameServer>ns-846.awsdns-41.net</NameServer></NameServers></DelegationSet></GetHostedZoneResponse>

DNSサーバ等の情報が得られる。

レコードの追加。

まずは普通のAレコード
~/work/r53% cat record.xml
<?xml version="1.0" encoding="UTF-8"?>
<ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2010-10-01/">
   <ChangeBatch>
      <Comment>
      add my instance
      </Comment>
      <Changes>
         <Change>
            <Action>CREATE</Action>
            <ResourceRecordSet>
               <Name>somehost.example.com.</Name>
               <Type>A</Type>
               <TTL>14400</TTL>
               <ResourceRecords>
                  <ResourceRecord>
                          <Value>10.72.36.246</Value>
                  </ResourceRecord>
               </ResourceRecords>
            </ResourceRecordSet>
         </Change>
      </Changes>
   </ChangeBatch>
</ChangeResourceRecordSetsRequest>
~/work/r53% ./dnscurl.pl --keyname my-aws-account -- -H "Content-Type: text/xml; charset=UTF-8" -X POST --upload-file record.xml https://route53.amazonaws.com/2010-10-01/hostedzone/Z6OFCRATY6S6R/rrset | tee out
<?xml version="1.0"?>
<ChangeResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2010-10-01/"><ChangeInfo><Id>/change/C3OBZESBFBJJEN</Id><Status>PENDING</Status><SubmittedAt>2010-12-07T02:52:13.781Z</SubmittedAt></ChangeInfo></ChangeResourceRecordSetsResponse>
~/work/r53% host somehost.example.com ns-123.awsdns-15.com
Using domain server:
Name: ns-123.awsdns-15.com
Address: 205.251.192.123#53
Aliases:

somehost.example.com has address 10.72.36.246

他にもドメイン自体にAレコードを振ったり(Nameにexample.comを指定)、ワイルドカードを指定したり(Nameに*.example.comを指定)してみたが、想定通り動作しました。

bind等他のDNSサーバからの移行に関して

ゾーン転送(AXFR)

ゾーン転送(AXFR)はサポートしていないみたいです。セカンダリサーバを立てなくても、すでに多重化されていますので、特に必要ありませんが。

~/work/r53% host -l example.com ns-123.awsdns-15.com
; Transfer failed.
; Transfer failed.
Using domain server:
Name: ns-123.awsdns-15.com
Address: 205.251.192.123#53
Aliases:

Host example.com.amazon.com not found: 4(NOTIMP)
; Transfer failed.
bindのviewに相当するものがない

1つのDNSサーバ上で、外側向け用の解決と内側向け用の解決をやっていたようなケースでviewを使ってる場合があると思いますが、そういった事は出来ないようです。
ハードウェアリソースの制限がないのでいくらでも作ってしまえばいいのですが、IPアドレス等によってレスポンスを変えたりといったような事がしづらいですね。