Help us understand the problem. What is going on with this article?

[AWS]Route53でダイナミックDNS

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
--//

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした