月別アーカイブ: 2012年1月

Route 53を使ってみる その3 (レコードの編集)

今回は登録済みのレコードの操作をテスト。

レコードの削除

登録済みのレコードを削除してみる。

削除対象を記述したゾーンファイルからXMLを作成してみる。 次の1行だけを記述したdelete.zoneを作成する。

host2   IN      A       192.168.0.2

XMLを作成する。

$ ./bindtoroute53.pl --origin example.com --action DELETE < delete.zone > delete.zone.xml

この出力を使ってAPIを叩く。

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

ところがエラーが返ってくる。

<?xml version="1.0"?>
<ErrorResponse xmlns="https://route53.amazonaws.com/doc/2010-10-01/">
  <Error>
    <Type>Sender</Type>
    <Code>InvalidChangeBatch</Code>
    <Message>Tried to delete resource record set host2.example.com., type A but the values provided do not match the current values</Message>
  </Error>
  <RequestId>405d16cb-3943-11e1-b191-b13fb4f3fdb4</RequestId>
</ErrorResponse>

delete.zone.xmlのレコードの部分の抜粋は次の通り。

     <ResourceRecordSet>
      <Name>host2.example.com.</Name>
      <Type>A</Type>
      <TTL>0</TTL>
      <ResourceRecords>
       <ResourceRecord>
        <Value>192.168.0.2</Value>
       </ResourceRecord>
     </ResourceRecords>

登録済みの情報と食い違いがあるのはTTLだけ。 削除をするためには、レコードの名前だけでなくTTLなども一致させておく必要があるようだ。

delete.zoneを次のように書き換えて、同じ手順を実行。うまくゆくことを確認できた。

host2   IN      3600 A       192.168.0.2

レコードの更新

レコードの更新はどうしたものかと思って、API リファレンスを読んでみたが、残念ながら特別な方法はなさそう。

今まで使ったCREATEとDELETEを組み合わせて、削除してから登録しなおすという手順が必要。 ただし、これはひとつのXMLの中に収めることができる。

TTLを3600から600に変更してみる。

レコードの削除に使ったXMLをベースにして、CREATEのための変更分を書き加えたXMLを作成する。

<?xml version="1.0" encoding="UTF-8"?>
<ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2010-10-01/">
 <ChangeBatch>
  <Comment>This change imports a zone file</Comment>
  <Changes>
   <Change>
    <Action>DELETE</Action>
     <ResourceRecordSet>
      <Name>host2.example.com.</Name>
      <Type>A</Type>
      <TTL>3600</TTL>
      <ResourceRecords>
       <ResourceRecord>
        <Value>192.168.0.2</Value>
       </ResourceRecord>
     </ResourceRecords>
    </ResourceRecordSet>
   </Change>
   <Change>
    <Action>CREATE</Action>
     <ResourceRecordSet>
      <Name>host2.example.com.</Name>
      <Type>A</Type>
      <TTL>600</TTL>
      <ResourceRecords>
       <ResourceRecord>
        <Value>192.168.0.2</Value>
       </ResourceRecord>
     </ResourceRecords>
    </ResourceRecordSet>
   </Change>
  </Changes>
 </ChangeBatch>
</ChangeResourceRecordSetsRequest>

これを使って、登録、削除の手順と同様にAPIを叩けばよい。

これで基本的な操作は一通りおさえられたかな。