AWS-Metadaten: Überprüfen Sie, ob die EC2-Instanz vor Ort ist.

7

Es gibt einen AWS-Metadatendienst , der einige Informationen zur EC2-Instanz bereitstellt, an die eine Anforderung gesendet wird http://169.254.169.254/. Ich frage mich, ob es eine Möglichkeit gibt, anhand dieser Metadaten zu erkennen, ob die Instanz "Spot" oder "On Demand" ist.

schnappen
quelle

Antworten:

8

Die Informationen sind in den Metadaten nicht verfügbar.

Sie können jedoch die Instanz-ID aus den Metadaten abrufen und dann ec2-description-instance aufrufen, um Instanzinformationen zu Ihrer Instanz abzurufen. In dieser Instanzbeschreibung befindet sich die Spot-Instanz-Anforderungs-ID. Wenn leer, ist es keine Spot-Instanz, andernfalls ist es eine Spot-Instanz.

Matt Houser
quelle
Nett! Vielen Dank, ich habe eine Weile danach gesucht und muss es beim Betrachten der Instanzdaten übersehen haben.
SaxDaddy
3

Ich glaube nicht, dass sie diese Informationen in den Metadaten haben.

Sie können Instanzen, die Sie als Spot-Instanzen starten, ein anderes Profil zuweisen und anhand des Profilnamens bestimmen, um welchen Instanztyp es sich handelt. Wenn dies keine saubere oder praktikable Lösung zu sein scheint, können Sie jederzeit die Instanz-ID aus den Metadaten abrufen und den Befehl ausführen, ec2-describe-spot-instance-requests --filter instance-id=<instanceid>wenn der Befehl leer zurückgegeben wird, da die Instanz keine Spot-Instanz ist. Wenn der Befehl mit Daten zurückgegeben wird, ist dies der Fall eine Spot-Instanz.

bwight
quelle
3

Ich weiß, das ist super alt, aber wenn jemand einen Einzeiler will:

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'

Passen Sie dies --regionentsprechend an

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

Urjit
quelle
2

Eine etwas verbesserte Version von @urjit:

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 "$(wget -q -O - http://169.254.169.254/latest/meta-data/placement/availability-zone | sed 's/.$//')" | \
  jq -r '.SpotInstanceRequests | if length > 0 then "Ec2Spot" else "OnDemand" end'
imriss
quelle