LoginSignup
3
5

More than 5 years have passed since last update.

Route53にDNS自動登録

Last updated at Posted at 2017-06-26
  • EC2インスタンスを起動すると内部DNSにAレコードを登録し、停止するとAレコードを削除するinitスクリプトを作成しました。 ”ZONE_NAME”だけ書き換えてあとはコピペでいける!はずです!

起動停止スクリプト作成

/etc/init.d/aws_route53_edit
#!/bin/bash
# chkconfig: 2345 99 10
# description: regist A record to aws route53
# Author:



ZONE_NAME="ゾーン名"
HOST_NAME=$(aws ec2 describe-tags --output text --query "Tags[?ResourceId==\`$(curl -s http://169.254.169.254/latest/meta-data/instance-id)\` && Key==\`Name\`].Value")
IP_ADDRESS=$(curl -s http://169.254.169.254/latest/meta-data/local-ipv4)
HOSTED_ZONE_ID=$(aws route53 list-hosted-zones | grep "Id" | awk '{print $2}' | sed -e 's/\/hostedzone\///' | sed -e 's/\,//' | sed -e 's/\"//g')
LOCK=/var/lock/subsys/aws_route53_edit


case "$1" in
  "start" )

  ARECORD_JSON="{
    \"Changes\" : [
      { \"Action\" : \"UPSERT\",
        \"ResourceRecordSet\" : {
          \"Name\" : \"${HOST_NAME}.${ZONE_NAME}\",
          \"Type\" : \"A\",
          \"TTL\"  : 60,
          \"ResourceRecords\": [
            { \"Value\" : \"${IP_ADDRESS}\" }
          ]
        }
      }
    ]
  }"
  touch $LOCK
  ;;

  "stop" )

  ARECORD_JSON="{
    \"Changes\" : [
      { \"Action\" : \"DELETE\",
        \"ResourceRecordSet\" : {
          \"Name\" : \"${HOST_NAME}.${ZONE_NAME}\",
          \"Type\" : \"A\",
          \"TTL\"  : 60,
          \"ResourceRecords\": [
            { \"Value\" : \"${IP_ADDRESS}\" }
          ]
        }
      }
    ]
  }"
  rm -f $LOCK
  ;;

  *)
  echo $"Usage: $0 {start|stop}"
  exit 2
  ;;

esac

自動起動停止登録

sudo chmod 755 /etc/init.d/aws_route53_edit
sudo chkconfig --add aws_route53_edit
sudo chkconfig --list aws_route53_edit

確認

  • マネジメントコンソールから落とし上げをして別ウィンドウでRoute53を監視

ハマったところ

  • ロックファイル
    /var/lock/subsys/以下にファイルが無いとうまく動かないことがしばらくわからず時間をかけてしまった。ない状態でやると起動時のレコード登録はうまくいくがレコード削除がされなかった

  • グローバルIP
    インスタンスから直接AWSのAPIを実行するのでグローバルIPが各インスタンスについていないとエラー。というか固まる。。。
    私はElasticIPではなく自動割当パブリックIPにしました

その他

  • 起動停止時にCloudWatch登録削除なども作成予定なのでスクリプト名やロックファイル名は”aws_サービス名_動作名”などがよさそう
3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5