cloud-initを使ってRoute53をPrivate Dynamic DNSにする
はじめに
Route53のPrivateDNS対応はとても大きなニュースでした。待ちわびていた方も多いのでは無いでしょうか。
さて、このPrivateDNSですが、台数が多くなればなるほど手動で管理するのは面倒です。勝手に登録されて、IPアドレスが変わったのなら勝手に更新してほしい。つまりDynamicDNSとして動いて欲しいですよね。
ということで、それをcloud-initでやりました。
やってみた
"Private Hosted Zone for Amazon VPC"でゾーンを作成しておきます。
Amazon Linux AMIでEC2をLaunchします。その際にRoute53の更新権限をIAM Roleで設定しておきます。今回はEC2 Power User Accessに設定しました。
User-Dataを以下のように設定します。13行目の"ResourceRecordSet"-"Name"に対象サーバに設定したいFQDNを、31行目のaws route53 change-resource-record-setsの--hosted-zone-idオプションに対象ホストゾーンのIDを書いておきます。
#cloud-config repo_update: true repo_upgrade: all write_files: - content: | { "Comment": "create A record", "Changes": [ { "Action": "UPSERT", "ResourceRecordSet": { "Name": "web1.smokeymonkey.local", "Type": "A", "TTL" : 3600 , "ResourceRecords": [ { "Value": "IPADDRESS" } ] } } ] } owner: root:root path: /root/update.json.org permissions: '0644' - content: | #!/bin/sh sed -e s/IPADDRESS/`hostname -i`/ /root/update.json.org > /root/update.json aws route53 change-resource-record-sets --hosted-zone-id Z315UP8BOUQTSK --change-batch file:////root/update.json sleep 3s owner: root:root path: /var/lib/cloud/scripts/per-boot/boot.sh permissions: '0755'
EC2がLaunchすると、雛形となる/root/update.json.orgと、EC2が起動したタイミングで毎回実行されるスクリプトになる/var/lib/cloud/scripts/per-boot/boot.shが作成されています。
$ sudo ls -alF /root/update.json.org -rw-r--r-- 1 root root 316 11月 7 09:54 /root/update.json.org $ sudo ls -alF /var/lib/cloud/scripts/per-boot/boot.sh -rwxr-xr-x 1 root root 208 11月 7 09:54 boot.sh*
そして以下のようにちゃんとレコードができています!
あとは起動されるたびにboot.shが実行され、レコードが更新されます。
さいごに
PrivateDNS機能がサポートされたことによって、今まで出来なかったサーバ間通信の管理がとても楽になりますね。上手に利用して更に効率的に運用していきたいものです。