この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
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機能がサポートされたことによって、今まで出来なかったサーバ間通信の管理がとても楽になりますね。上手に利用して更に効率的に運用していきたいものです。