AWS メタデータ: EC2 インスタンスがスポットかどうかを確認しますか?

AWS メタデータ: EC2 インスタンスがスポットかどうかを確認しますか?

ありますAWS メタデータリクエストを発行する EC2 インスタンスに関する情報を提供するサービスですhttp://169.254.169.254/。そのメタデータからインスタンスが「スポット」か「オンデマンド」かを知る方法はあるでしょうか?

答え1

情報はメタデータ内では利用できません。

ただし、メタデータからインスタンス ID を取得し、ec2-describe-instances を呼び出してインスタンスに関するインスタンス情報を取得できます。そのインスタンスの説明内には、スポット インスタンスのリクエスト ID があります。空白の場合はスポット インスタンスではなく、それ以外の場合はスポット インスタンスです。

答え2

メタデータにこの情報があるとは思えません。

スポット インスタンスとして起動するインスタンスに別のプロファイルを割り当て、プロファイル名を使用してインスタンスの種類を判別することができます。これがクリーンな、または実行可能な解決策ではないと思われる場合は、メタデータからインスタンス ID を取得してコマンドを実行し、ec2-describe-spot-instance-requests --filter instance-id=<instanceid>コマンドが空を返す場合はインスタンスがスポット インスタンスではなく、コマンドがデータとともに返す場合はスポット インスタンスであることがわかります。

答え3

これはかなり古いことだとは分かっていますが、もし誰かが一言欲しいなら:

aws ec2 describe-spot-instance-requests \
  --filters Name=instance-id,Values="$(wget -q -O - http://169.254.169.254/latest/meta-data/instance-id)" \
  --region us-east-1 | \
  jq -r '.SpotInstanceRequests | if length > 0 then "spot" else "normal" end'

--regionそれに応じて調整する

https://gist.github.com/urjitbhatia/c5af8a3d53661cb3d4e896feae23fc1d

答え4

年月とともに状況は変わったようで、今はうまくいっている

# a spot instance
$ curl -s --fail http://169.254.169.254/latest/meta-data/instance-life-cycle
spot
# a normal instance
$ curl -s --fail http://169.254.169.254/latest/meta-data/instance-life-cycle
on-demand

関連情報