前置き
現在、EC2のOSを「Amazon linux 2」 から「Amazon linux 2023」へ移行する行検証をしております。
その中で判明した事象の一つである、インスタンスメタデータ取得方法の変更について記録しておきます。
実施したいこと
EC2上で動くバッチ上で、サーバーのインスタンスIDを取得したい
Amazon linux 2023でインスタンスメタデータからインスタンスIDを取得する方法(お急ぎの方はこちらだけ)
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
INSTANCE_ID=`curl -H "X-aws-ec2-metadata-token: $TOKEN" -s http://169.254.169.254/latest/meta-data/instance-id`
echo $INSTANCE_ID
検証の経緯
そもそもインスタンスメタデータとは?
インスタンスメタデータは「インスタンスに関するデータ」のことで、実行中のインスタンス自身から取得できるようになっております。
取得できるデータはamiのidやセキュリティグループなど、多岐にわたります。
↓AWS公式ドキュメント
・インスタンスメタデータとは
・取得されるインスタンスメタデータ一覧
Amazon linux 2の際の取得方法
以下の1行でインスタンスIDが取得できていました。
INSTANCE_ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id`
Amazon linux 2023の際の取得方法(失敗)
amazon linux2と同じバッチファイルを実行したところ、なぜかエラーが発生。
確認したところ、インスタンスIDが取得できていませんでした。
コマンドで実施しても何も出ません。
[root@ip-xxx ~]# INSTANCE_ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id`
[root@ip-xxx ~]# echo $INSTANCE_ID
[root@ip-xxx ~]# curl -s http://169.254.169.254/latest/meta-data/instance-id
[root@ip-xxx ~]#
Amazon linux 2023の変更点
インスタンスメタデータサービスバージョン 2 (IMDSv2)からでしかメタデータが取得できなくなっておりました。
このため、上記のバッチで使っているコマンド(旧バージョン)では取得できなかったようです。
・2023の公式FAQ
・インスタンスメタデータサービスバージョン 2 (IMDSv2)について
ということで、インスタンスメタデータサービスバージョン 2 (IMDSv2)で再度実施してみます。
Amazon linux 2023でインスタンスメタデータからインスタンスIDを取得する方法
[root@ip-xxx ~]# TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 56 100 56 0 0 11247 0 --:--:-- --:--:-- --:--:-- 14000
[root@ip-xxx ~]# INSTANCE_ID=`curl -H "X-aws-ec2-metadata-token: $TOKEN" -s http://169.254.169.254/latest/meta-data/instance-id`
[root@ip-xxx ~]# echo $INSTANCE_ID
i-xxxxxxxxxx
無事インスタンスIDが取得できました。