2024-03-05に投稿

【AWS】EC2インスタンスに割当されたパブリックIPv4アドレスをRoute 53に登録するシェルスクリプト(IMDSv2版)

AWS

参考記事

【出典】クラスメソッド:【Route53】EC2 から自身に付与されたパブリックIP を Route53 に設定したい
https://dev.classmethod.jp/articles/route53-record-ip-change-by-aws-cli/

IMDSv2が有効だと参考記事のシェルスクリプトは動かない!

IMDSv1はこれで良いが、IMDSv2が有効だと以下ではパブリックIPv4アドレスが取得不可です

IP_ADDRESS=`curl -s http://169.254.169.254/latest/meta-data/public-ipv4`

IMDSv2でパブリックIPv4アドレスを取得する方法は以下が参考になります

【出典】Amazon公式:インスタンスメタデータの取得
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html

IMDSv2対応版シェルスクリプト

Amazon公式情報を参考に修正したシェルスクリプトがこちら

#!/bin/bash
DOMAIN_NAME="example.me"
SUB_NAME="test01"
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
IP_ADDRESS=`curl -H "X-aws-ec2-metadata-token: $TOKEN" -s http://169.254.169.254/latest/meta-data/public-ipv4`

HOSTED_ZONE_ID="ZONE-IDを入力"

BATCH_JSON='{
  "Changes": [
    { "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "'${SUB_NAME}'.'${DOMAIN_NAME}'",
        "Type": "A",
        "TTL" : 300,
        "ResourceRecords": [
          { "Value": "'${IP_ADDRESS}'" }
        ]
      }
    }
  ]
}'

aws route53 change-resource-record-sets --hosted-zone-id ${HOSTED_ZONE_ID}  --change-batch "${BATCH_JSON}"

所感

IMDSv2についてよくわかっていなかったが、今回の件でIMDSv1との違いが少し理解できました。

ツイッターでシェア
みんなに共有、忘れないようにメモ

arohajiro

しがない元インフラエンジニアです

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント