1
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Route53でダイナミックDNS

Last updated at Posted at 2019-11-11

Elastic IP をケチりたい

たまにしか起動しないインスタンスに Elastic IP をアタッチするのはもったいない。といって、起動するたびにIPアドレスが変わるとホスト名でアクセスできなくて面倒くさい。

……と思ったので Route 53 でIPアドレスを自動設定してくれるスクリプトを書いた。

2019年11月21追記
一段と自動化した Lambda を作りました:
[AWS]インスタンス起動時にIPアドレスを自動でRoute53に登録する

用意するもの

  • 登録したい Route 53 のホストゾーンID

ホスト名

対象のOSでホスト名を設定する。この名前が Route 53 に登録される。ドメイン名がホストゾーンIDと一致していることを確認する。

Amazon Linux 2 では次のような感じでホスト名を設定できる。

hostnamectl set-hostname route53test.example.com

IAMポリシー

このポリシーをアタッチしたロールを、インスタンスにアタッチする。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "route53dynamic",
            "Effect": "Allow",
            "Action": "route53:ChangeResourceRecordSets",
            "Resource": "arn:aws:route53:::hostedzone/Z123456789ABCD"
        }
    ]
}

スクリプト本体

これを /usr/local/sbin に置く。

set-dns-record.sh
#!/bin/bash

HOSTZONE_ID=$1

host_addr=`curl -s http://169.254.169.254/latest/meta-data/public-ipv4`
host_name=`hostname`
tmp_file=`mktemp`

cat <<EOS > $tmp_file
{
  "Comment": "optional comment about the changes in this change batch request",
  "Changes": [
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "${host_name}.",
        "Type": "A",
        "TTL": 300,
        "ResourceRecords": [
          {
            "Value": "${host_addr}"
          }
        ]
      }
    }
  ]
}
EOS

aws route53 change-resource-record-sets --hosted-zone-id $HOSTZONE_ID --change-batch file://$tmp_file

rm $tmp_file

ユーザーデータ

毎起動時に実行したいので、このあたりを参考にしてユーザーデータを書く。ちょっと面倒くさい。

Amazon EC2 インスタンスを再起動するたびにユーザーデータを実行して自動的にファイルを作成する方法を教えてください。

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
/usr/local/sbin/set-dns-record.sh Z123456789ABCD
--//

ユーザーデータに直接スクリプトを書くのもあり、なのかも……?

1
6
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
1
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?