DDNS使えって話なんですけどAWSで済ませたかったので。。
具体的な方法としては単純に動的IPを持ったサーバーのcrontabに次のようなシェルを突っ込んで、crontabに入れるだけ。
{
"Comment": "UPSERT 適当なコメント",
"Changes": [{
"Action": "UPSERT",
"ResourceRecordSet": {
"Name": "設定したいFQDN",
"Type": "A",
"TTL": 300,
"ResourceRecords": [{ "Value": "1.1.1.1"}]
}}]
}
#!/bin/bash
set -e
AWS_PROFILE=AWSプロファイル名
HOSTZONE_ID=ホストゾーンID
EXEC_AWS="/usr/local/bin/aws --profile ${AWS_PROFILE}"
WORK_DIR=/path/to/scripts/
CURRENT_IP=`curl inet-ip.info`
IP_CHANGED=`grep "\"${CURRENT_IP}\"" ${WORK_DIR}batch.json | wc -l`
if [ $IP_CHANGED = "0" ];then
sed -i "s/\(\"Value\": \"\).\+\(\"\)/\1${CURRENT_IP}\2/g" ${WORK_DIR}batch.json
echo "`date` ip address changed"
$EXEC_AWS route53 change-resource-record-sets --hosted-zone-id $HOSTZONE_ID --change-batch file://${WORK_DIR}batch.json
else
echo "`date` ip address unchanged"
fi
AWS_PROFILE, HOSTZONE_ID, WORK_DIRを書き換えそれぞれ適当なワーキングディレクトリで batch.json script.sh と名付けてscript.shには実行権限を付けてcrontabに設定。
* * * * * /home/xxxxxx/scripts/route53-ddns/script.sh >> ~/log/route53-ddns.log 2>> ~/log/route53-ddns.log
処理はUPSERT(INSERT OR UPDATE)なので、crontabに設定してログにAWSの操作ログが出ていて、Route53で正しくレコードが設定されていれば設定完了。雑に書いてるので、本当はdigなりnslookupなりで正しくレコードが設定されているか(このスクリプトが正常に機能しているか)を検証して、スクリプトの実行に失敗している場合はslackに通知するとかしておいた方が良いと思います。
エンジニアとして働く90年生まれ。Web系技術を追っかけたり、PCガジェットや自転車いじりが趣味。オーディオオタク。