LoginSignup
22
23

More than 5 years have passed since last update.

aws-cliをつかってDynamic DNSサービス

Last updated at Posted at 2014-10-06

はじめに

Route53はAWSのサービスですので、APIが存在します。またawsコマンドで操作も出来ます。
固定IPをもっていないマシンでもDNSで検索できるようなDynamic DNSサービスも簡単に作れます。
ということで、コマンドラインでの設定方法を説明します。cron等にいれればIPが更新されても
大丈夫です。

前提条件

  • ドメインは既にRoute53に登録してあること
  • aws-cliが利用できること(aws-cli 1.4.3で確認しています)
  • jq,curlが利用できること

Hosted Zone IDの取得

まずは登録しているドメインのHosted Zone IDを調べます。以下のようなコマンドで調べられます。


aws route53 list-hosted-zones | jq '.HostedZones[] |  {Name , Id } '

実行すると下記のように出力されます。


$ aws route53 list-hosted-zones | jq '.HostedZones[] |  {Name , Id } '{
  "Id": "/hostedzone/ZZZZZXXXX3333",
  "Name": "xxxxxxx.com."
}

この例だと ZZZZZXXXX3333 が hosted zone ID、ドメインは xxxxxxx.com になります。

レコード登録スクリプト

こちら登録スクリプトになります。スクリプト中に3つのシェル変数を設定してください。

#!/bin/sh

R53_ZONE_NAME= #ドメイン名 (example.com等)
R53_HOSTNAME=  #ホスト名 (testserver等)
HOSTED_ZONEID= #Hosted zone ID

R53_CALLER="${R53_ZONE_NAME}-`date +%Y%m%d-%H%M%S`"
R53_COMMENT="dynamic dns record set"
MY_DDNS_RECORD=${R53_HOSTNAME}.${R53_ZONE_NAME}

MY_PUBLIC_IP=`curl -s ifconfig.me`
if [ -z $MY_PUBLIC_IP ] ;  then
    MY_PUBLIC_IP=`curl -s ipinfo.io | jq -r '.ip'`
fi

if [ -z $MY_PUBLIC_IP ] ;  then
    echo "failed to get global IP address"
    exit 1
fi
cat <<EOT > /tmp/recordset.json
{
  "Comment": "create A record",
  "Changes": [
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "${MY_DDNS_RECORD}",
        "Type": "A",
        "TTL": 3600 ,
        "ResourceRecords": [
         {
           "Value": "${MY_PUBLIC_IP}"
         }
        ]
      }
    }
  ]
}
EOT

aws route53 change-resource-record-sets --hosted-zone-id $HOSTED_ZONEID --change-batch file:///tmp/recordset.json 

rm -rf /tmp/recordset.json

ポイントとしてはグローバルIPを調べるために二つサービスを利用している点と、レコードセット登録にinsertではなくupsert(あれば更新、なければ追加)です。

実行するとこんな感じで出力されます。


$ ./upsert_dns.sh
{
    "ChangeInfo": {
        "Status": "PENDING", 
        "SubmittedAt": "2014-10-06T13:44:34.264Z", 
        "Id": "/change/ZZZZZXXXX3333", 
        "Comment": "create A record"
    }
}

分散サービスなので登録されるまで少し時間がかかりますが、登録されるとホスト名が引けるようになります。

まとめ

Route53のレコードセットを登録するスクリプトを作成しました。波田野さんの主催する
JAWS-UG CLI専門支部 #1 - Route53でドメインホスティング
を元にしています。この勉強会は役に立つのでおすすめです。

ではでは。

22
23
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
22
23