AWS cli53を利用してDynamicDNSのようなことを実現する

cli53を利用して起動時にRoute53のDNSを書き換える

AWSのPublicIPはelasticIPを利用しないと起動時にIPが変わってしまうため、
Route53などにホスト名を登録してしまうと以前のIPを参照してしまいます。

起動時に直接cli53を利用して、
Route53のホスト名に割り当てられているIPをコマンドラインで操作してDynamicDNSのようなことが実現できます。

https://github.com/barnybug/cli53

Cli53 インストール

easy_installでインストールが可能です。

$ sudo easy_install pip
$ sudo pip install cli53

使い方

www.hogehoge.co.jp がRoute53に登録したい場合

$ curl -s http://169.254.169.254/latest/meta-data/public-ipv4 | xargs -i cli53 rrcreate hogehoge.co.jp www A {} --ttl 60 --replace

解説

不思議な長ったらしいコマンドがならんでいましたが、1つめのコマンドの結果を | で区切った次のコマンドに受け渡しているだけです。

自分のPublicIPを取得する

$ curl -s http://169.254.169.254/latest/meta-data/public-ipv4

169.254.169.254はAWSの各種サービスの内容などを取得できるAPIです。
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html

取得したIPをxargsで受け取ってcli53に渡して書込

$ xargs -i cli53 rrcreate hogehoge.co.jp www A {} --ttl 60 --replace

initに登録して起動時に自動的にコマンドを実行する

init.dにroute53を新規作成

/etc/init.d/rout53

#! /bin/sh

### BEGIN INIT INFO
# Provides:             route53
# Required-Start:
# Required-Stop:
# Default-Start:        2 3 4 5
# Default-Stop:
# Short-Description:    route53 remount
### END INIT INFO

curl -s http://169.254.169.254/latest/meta-data/public-ipv4 | xargs -i cli53 rrcreate hogehoge.co.jp www A {} --ttl 60 --replace

exit 0

反映

$ sudo chmod +x /etc/init.d/route53
$ sudo update-rc.d route53 defaults

AccessKeyの登録

cli53は実行したユーザのホームディレクトリの ~/.boto.cfg or /etc/boto.cfgを読みに行くようですので、
とりあえずセキュリティはおいておいて/etc/boto.cfgにアクセスキーを記述しておきます。

/etc/boto.cfg

[Credentials]
aws_access_key_id = <your access key>
aws_secret_access_key = <your secret key>

自動起動開始時にコマンドが実行されるので自動的に自分のPublicIPが登録されるという仕組みができました。
DNSが更新されるタイミングで見れるようになるので見れない場合はdigなどを利用して、
本当にIPアドレスがホスト名にぶら下がっているか確認してください。