R53 Fox も Google Spreadsheets のも知ってるけどさ

boto が好きなので boto で Route 53 いじるぜ。

boto のセットアップ的なことは「http://aws.lefthandz.org/joomla/cloud/97-python-boto-aws-」に任せるぜ。

>>> from boto import route53
>>> conn = route53.Route53Connection()
>>> conn.get_all_hosted_zones()
{u'ListHostedZonesResponse': {u'HostedZones': [], u'IsTruncated': u'false', u'MaxItems': u'100'}}

空だなぁ。

xn--diz.jp というドメインを取ってみたので登録してみようと思います。

>>> conn.create_hosted_zone('xn--diz.jp.')
{u'CreateHostedZoneResponse': {u'HostedZone': {u'CallerReference': u'1e82cbe0-4027-4f66-885e-2e277a73f7e5', u'Config': {u'Comment': {}}, u'Id': u'/hostedzone/Z3P4DE8ND2AYEM', u'Name': u'xn--diz.jp.'}, u'ChangeInfo': {u'Status': u'PENDING', u'SubmittedAt': u'2011-11-09T15:38:16.057Z', u'Id': u'/change/C2U2D3UJRE80AQ'}, u'DelegationSet': {u'NameServers': [u'ns-615.awsdns-12.net', u'ns-1985.awsdns-56.co.uk', u'ns-1320.awsdns-37.org', u'ns-211.awsdns-26.com']}}}
>>> conn.get_all_hosted_zones()
{u'ListHostedZonesResponse': {u'HostedZones': [{u'CallerReference': u'1e82cbe0-4027-4f66-885e-2e277a73f7e5', u'Config': {}, u'Id': u'/hostedzone/Z3P4DE8ND2AYEM', u'Name': u'xn--diz.jp.'}], u'IsTruncated': u'false', u'MaxItems': u'100'}}
>>> for i in conn.get_all_rrsets('Z3P4DE8ND2AYEM'):
...     i.name, i. type, i.resource_records
... 
(u'xn--diz.jp.', u'NS', [u'ns-615.awsdns-12.net.', u'ns-1985.awsdns-56.co.uk.', u'ns-1320.awsdns-37.org.', u'ns-211.awsdns-26.com.'])
(u'xn--diz.jp.', u'SOA', [u'ns-615.awsdns-12.net. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400'])

DNS サーバの名前がいくつか出てるので WHOIS 情報をこれに合わせて更新してあげましょう。

$ whois xn--diz.jp -h whois.jprs.jp | grep 'Name Server'
[Name Server]                   ns-1320.awsdns-37.org
[Name Server]                   ns-1985.awsdns-56.co.uk
[Name Server]                   ns-211.awsdns-26.com
[Name Server]                   ns-615.awsdns-12.net

うし。

ってここまではまぁ ipython から色々いじってできてたんだけど次どーやってレコード登録したらいいか分からなくて「うわーん」ってなったので、source 落としてきて悩もうと思ったら bin とかいう directory があって bin/route53 とかいうコマンドがあるでやんのよ。

$ ./bin/route53 
Usage: route53 [command]
	add_alias             Add a new alias to a zone
	add_record            Add a new record to a zone
	change_record         Delete and then add a record to a zone
	cmd                   Prints this help message
	create                Create a hosted zone, returning the nameservers
	del_alias             Delete an alias from a zone
	del_record            Delete a record from a zone
	delete_zone           Delete a hosted zone by ID
	get                   Get all the records for a single zone
	help                  Prints this help message
	ls                    List all hosted zones
$ ./bin/route53 ls
================================================================================
| ID:   Z3P4DE8ND2AYEM
| Name: xn--diz.jp.
| Ref:  1e82cbe0-4027-4f66-885e-2e277a73f7e5
================================================================================
{}

━━━━━━(゚∀゚)━━━━━━ !!!!!

くやしいけど中身見るヨ。

def add_record(conn, hosted_zone_id, name, type, values, ttl=600, comment=""):
    """Add a new record to a zone"""
    from boto.route53.record import ResourceRecordSets
    changes = ResourceRecordSets(conn, hosted_zone_id, comment)
    change = changes.add_change("CREATE", name, type, ttl)
    for value in values.split(','):
        change.add_value(value)
    print changes.commit()

なるほど。便利だ。なんでこれが boto.route53 の下にないんだ? まぁもぉいいや、面倒だから route53 でいいよね。

$ ./bin/route53 add_record
add_record() takes at least 5 arguments (1 given)
Add a new record to a zone
Usage: add_record [hosted_zone_id] [name] [type] [values] [ttl] [comment]
$ ./bin/route53 add_record Z3P4DE8ND2AYEM aws.xn--diz.jp. CNAME aws.amazon.com 86400 'just test for route53'
{u'ChangeResourceRecordSetsResponse': {u'ChangeInfo': {u'Status': u'PENDING', u'SubmittedAt': u'2011-11-09T15:56:59.332Z', u'Id': u'/change/C2WJQNZ6KQZSZW'}}}
$ ./bin/route53 get Z3P4DE8ND2AYEM
Name                                     Type  TTL                  Value(s)
xn--diz.jp.                              NS    172800               ns-615.awsdns-12.net.,ns-1985.awsdns-56.co.uk.,ns-1320.awsdns-37.org.,ns-211.awsdns-26.com.
xn--diz.jp.                              SOA   900                  ns-615.awsdns-12.net. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400
aws.xn--diz.jp.                          CNAME 86400                aws.amazon.com
$ host aws.xn--diz.jp
aws.xn--diz.jp is an alias for aws.amazon.com.
aws.amazon.com has address 72.21.206.131

━━━━━━(゚∀゚)━━━━━━ !!!!!

えーとなんだこれ、結論としては route53 コマンド便利だよ、なのか??