Route 53を使ってみる (ゾーンの設定)

サービスの利用コストの低さや、耐障害性の高さなど、様々な魅力がありながらも、 運用面でそれなりに準備が必要だと思っていて、なかなか手をつけられなかったが、 そろそろ触り始めてみようかと。

Management Consoleからでも、十分に操作ができることはわかっているのだが、 更新やテストをある程度、自動化しておきたいので、コマンドラインで使えるツールを試してみる。

APIの操作

Amazon Route 53 Authentication Tool for Curl” を使ってみる。

perlの依存関係を解決して、使い方を見てみる。

$ ./dnscurl.pl
Usage: dnscurl.pl --keyname <friendly key name> -- [curl-options]

Examples:
        $ dnscurl.pl --keyname fred-personal -- -X POST -H "Content-Type: text/xml; charset=UTF-8" --upload-file create_request.xml https://route53.amazonaws.com/2010-10-01/hostedzone    # create new hosted zone
        $ dnscurl.pl --keyname fred-personal -- https://route53.amazonaws.com/2010-10-01/hostedzone/Z123456    # get hosted zone
        $ dnscurl.pl --keyname fred-personal -- https://route53.amazonaws.com/2010-10-01/hostedzone           # list hosted zones

サンプルではAPIのバージョン番号が2010-10-01になっている。アクセスするAPIのURLなので、 有効なAPIのバージョン、もしくは”latest”を利用することができると思う。

この時点の最新版のバージョン番号は2011-05-05なのだが、後から試す他のツールが軒並み、 2010-10-01を前提にした出力をしてくるので、とりあえず試す程度なら面倒なことはしないほうがよさそう。

Route 53を使うために必要な認証の設定をしておく。

次のような内容で、作業をするユーザのホームディレクトリに .aws-secretsを作っておく。 もちろん、fred-personal、fred-workの部分は自由に決めてよく、idとkeyには有効な アクセスキーとシークレットアクセスキーを記述しておく。

%awsSecretAccessKeys = (
    # my personal account
    'fred-personal' => {
        id => 'xxxxx',
        key => 'xxxxxxxxxx',
    },

    # my corporate account
    'fred-work' => {
        id => 'xxxxx',
        key => 'xxxxxxxxxx',
    },
);

重要な情報の記述されたファイルなので、パーミッションを変更しておくこと。

$ chmod 600 ~/.aws-secrets

試しに登録済みのゾーン情報を取得してみる。

$ ./dnscurl.pl --keyname (keyname) -- https://route53.amazonaws.com/2010-10-01/hostedzone

この時点では空なので、返ってくる結果は次の通り。

<?xml version="1.0"?>
<ListHostedZonesResponse xmlns="https://route53.amazonaws.com/doc/2010-10-01/">
  <HostedZones/>
  <IsTruncated>false</IsTruncated>
  <MaxItems>100</MaxItems>
</ListHostedZonesResponse>

他の使い方は追々試してゆくことにする。

ゾーンの作成

Amazon Route 53 Zone Creation Tool” を使ってみる。 これは指定したドメイン名のゾーンを登録するためのXMLを作成してくれる。

こちらもPerlの依存関係を解決して、使い方を確認しておく。

$ ./route53zone.pl --help
Usage:
    This script generates CreateHostedZoneRequest XML.

    Dependencies: Data::GUID.

    For help, try:

    route53zone.pl --help

    Usage example:

    route53zone.pl --origin example.com

Options:
    --help  Print a help message and exits.

    --origin [origin]
            Specify the zone origin. (Required)

    --comment [comment]
            Comment to use in HostedZoneConfig

example.comのゾーンを作成してみる。

$ ./route53zone.pl --origin example.com > example.com.zone.xml

生成されるXMLは次のようになっているはず。

<?xml version="1.0" encoding="UTF-8"?>
<CreateHostedZoneRequest xmlns="https://route53.amazonaws.com/doc/2010-10-01/">
 <Name>example.com.</Name>
 <CallerReference>AF9245CA-352C-11E1-A1CB-A60FAACCC620</CallerReference>
 <HostedZoneConfig>
  <Comment>Zone for example.com.</Comment>
 </HostedZoneConfig>
</CreateHostedZoneRequest>

これを使ってAPIを叩く。

$ ./dnscurl.pl --keyname (keyname) -- -X POST -H "Content-Type: text/xml; charset=UTF-8" --upload-file example.com.zone.xml https://route53.amazonaws.com/2010-10-01/hostedzone

次のようにレスポンスが返ってくる。

<?xml version="1.0"?>
<CreateHostedZoneResponse xmlns="https://route53.amazonaws.com/doc/2010-10-01/">
  <HostedZone>
    <Id>/hostedzone/Z17M65VNB2W7JY</Id>
    <Name>example.com.</Name>
    <CallerReference>AF9245CA-352C-11E1-A1CB-A60FAACCC620</CallerReference>
    <Config>
      <Comment>Zone for example.com.</Comment>
    </Config>
  </HostedZone>
  <ChangeInfo>
    <Id>/change/C2IY282BLBW5TO</Id>
    <Status>PENDING</Status>
    <SubmittedAt>2012-01-02T07:44:55.249Z</SubmittedAt>
  </ChangeInfo>
  <DelegationSet>
    <NameServers>
      <NameServer>ns-1998.awsdns-57.co.uk</NameServer>
      <NameServer>ns-1339.awsdns-39.org</NameServer>
      <NameServer>ns-70.awsdns-08.com</NameServer>
      <NameServer>ns-723.awsdns-26.net</NameServer>
    </NameServers>
  </DelegationSet>
</CreateHostedZoneResponse>

これでSOAとNSレコードだけからなる、ほぼ空のゾーンが作成される。

この時点で、ステータスはPENDINGになっているが、次のようにしてその後のステータスを確認することができる。

$ ./dnscurl.pl --keyname (keyname) -- https://route53.amazonaws.com/2010-10-01/change/C2IY282BLBW5TO

結果は次の通り。同期が完了していることがわかる。

<?xml version="1.0"?>
<GetChangeResponse xmlns="https://route53.amazonaws.com/doc/2010-10-01/">
  <ChangeInfo>
    <Id>/change/C2IY282BLBW5TO</Id>
    <Status>INSYNC</Status>
    <SubmittedAt>2012-01-02T07:44:55.249Z</SubmittedAt>
  </ChangeInfo>
</GetChangeResponse>

登録時のレスポンスとほぼ同じなので、結果は省略するが、登録されたゾーンの情報は次のようにして確認できる。

$ ./dnscurl.pl --keyname (keyname) -- https://route53.amazonaws.com/2010-10-01/hostedzone/Z17M65VNB2W7JY

ゾーンの削除

登録したゾーンは次のようにして削除することができる。 ただし、レコードがひとつでも残っていると削除できないことに注意。

$ ./dnscurl.pl --keyname (keyname) -- -X DELETE https://route53.amazonaws.com/2010-10-01/hostedzone/Z17M65VNB2W7JY

レスポンスは次の通り。

<?xml version="1.0"?>
<DeleteHostedZoneResponse xmlns="https://route53.amazonaws.com/doc/2010-10-01/">
  <ChangeInfo>
    <Id>/change/C2MJBUMNMJ7T3Z</Id>
    <Status>PENDING</Status>
    <SubmittedAt>2012-01-02T07:49:37.396Z</SubmittedAt>
  </ChangeInfo>
</DeleteHostedZoneResponse>

続きはまた別のエントリで。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>