gokigenmaruのブログ

40から始めるクラウドエンジニア

AmazonLinux2からAmazonLinux2023に移行したらEC2のメタデータが取れなくなった

お題の通りで、AmazonLinux2からAmazonLinux2023に移行したらEC2のメタデータが取れなくなった件です。

EC2の移行

AmazonLinux2はサポート終了日が 2025年6月30日までとなっており、利用者はそれまでにAmazonLinux2023などに移行が必要です。
AWSの公式サイトにサポート終了日の記載があります。
aws.amazon.com

ということで、AmazonLinux2の移行を検討していく必要があります。
AWSではAmazonLinux2の後継としてAmazonLinux2023がリリースされております。
大きな違いはOSがRedhat/CentOSベースからFedoraベースに変更されたことでしょうか。パッケージ管理系のコマンドがyumからdnfになっています。
その他、大きな変更点などは他の先人たちのサイトを見ていただくのがよろしいかとおもいます。

AmazonLinux2023に移行

ということで、AmazonLinux2をAmazonLinux2023に移行してみました。
移行といっても既存で入っているMWなどを新たに構築したAmazonLinux2023で再構築する形です。
先述した通り、Redhat/CentOSベースからFedoraベースに変更されていますので、パッケージインストールはdnfに変更。
その他一般的なLinuxコマンドは変わらず利用できそうです。デーモン管理などもsystemctlで実行可能です。

MWを一通り再設定してみて稼働確認して問題なし、OSは異なれどLinux同士なのでそこまで難しくはないです。
※細かいところで違いはきっとあると思いますが、稼働については今のところ問題なさそう。

EC2のメタデータが取れない

一通り構築が終わり、EC2のメタデータを利用してホスト名をつけようと思った時に問題が発生。
想定した通りにホスト名が設定できませんでした。
実行コマンドを1個1個確認していったところ、メタデータの取得でデータが何もとれていないことが判明。
AmazonLinux2の時にメタデータ取得に利用していたコマンド

curl http://169.254.169.254/latest/meta-data/

AmazonLinux2023ではIMDSv2がデフォルトで動作

調べてみたところ、AmazonLinux2023ではIMDSv2がデフォルトで動作するようです。
IMDSv2で動作する場合、メタデータ取得する際にTokenを取得し、そのTokenをHeaderにセットして利用する必要がありました。
docs.aws.amazon.com

ということで、AmazonLinux2の時にメタデータ取得に利用していたコマンドを以下の通り変更

TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/

メタデータを複数取得して変数に入れたいみたいなときはこんな感じです。

TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
AMIId=`curl -H "X-aws-ec2-metadata-token: $TOKEN" -s http://169.254.169.254/latest/meta-data/ami-id`
InstanceId=`curl -H "X-aws-ec2-metadata-token: $TOKEN" -s http://169.254.169.254/latest/meta-data/instance-id`
region=`curl -H "X-aws-ec2-metadata-token: $TOKEN" -s http://169.254.169.254/latest/meta-data/placement/availability-zone`