Gibt es eine Möglichkeit, die Region einer Instanz innerhalb der Instanz nachzuschlagen?
Ich suche nach etwas ähnlichem wie die Methode zum Finden der Instanz-ID .
amazon-ec2
amazon-web-services
Gary Richardson
quelle
quelle
http://169.254.169.254/latest/meta-data/placement/availability-zone
und entfernen Sie das letzte Zeichen.Antworten:
Diese URL ( http://169.254.169.254/latest/dynamic/instance-identity/document ) scheint nicht mehr zu funktionieren. Ich bekomme eine 404, als ich versuchte, sie zu benutzen. Ich habe den folgenden Code, der jedoch zu funktionieren scheint:
Hoffe das hilft.
BEARBEITEN: Verbessert
sed
basierend auf Kommentarenquelle
ec2-metadata
ist nur ein Wrapper für diese API, macht aber im Wesentlichen das Gleiche.sed 's/[a-z]$//
Es gibt noch einen weiteren Weg, dies zu erreichen:
quelle
404 - Not Found
versuche,GET
diese URL von einem Computer in zu erreichenus-east-1a
.curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r .region
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | awk -F\" '/region/ {print $4}'
Wenn Sie mit der Verwendung einverstanden sind
jq
, können Sie Folgendes ausführen:Ich denke, es ist der sauberste Weg.
quelle
Bei Debian-basierten Systemen ist der Befehl ohne Bindestrich.
quelle
ec2-metadata --availability-zone | sed 's/placement: \(.*\).$/\1/'
ec2-metadata
scheint nicht standardmäßig verfügbar zu sein - können Sie Installationsanweisungen hinzufügen?Wenn Sie reguläre Ausdrücke vermeiden möchten, können Sie mit Python einen Einzeiler verwenden:
quelle
Sie können ec2-Metadaten verwenden:
quelle
eu-central-1
Sie fertig.central
existierte nicht, als ich meine Antwort schrieb. Es ist jetzt hinzugefügt.awk '{split($2,arr,"-"); print arr[1]"-"arr[2]}'
werden nur die ersten beiden Komponenten des AZ-Namens beibehalten.eu-west-1
,eu-west-2
undeu-west-3
(auchus-west-1
undus-west-2
) @OP: nur passende'[a-z][a-z]-[a-z]*-[0-9][0-9]*'
scheint sicherer (die eine grundlegende Regex ist, kann es kürzer mit einem erweiterten RE werden). (Die aktuelle Regex wird für dieca
Region, dieaf
Regionen und dieme
Region brechen )Am einfachsten fand ich bisher
quelle
sehr einfacher Einzeiler
quelle
curl: (6) Could not resolve host: instance-data; Name or service not known
Fehler zurück.Wenn Sie jq installiert haben, können Sie dies auch folgendermaßen tun (wahrscheinlich die "anmutigste" Methode):
Dies gibt einfach den Rohwert von "region" ohne hübschen Druck oder andere Formatierungen zurück. Referenz: AWS Forum
quelle
Holen Sie sich die Region aus der Verfügbarkeitszone und entfernen Sie den letzten Buchstaben.
quelle
Verwenden Sie JQ:
quelle
Wenn Sie das AWS Java SDK verwenden können, gibt es jetzt eine Methode, die den aktuellen Regionsnamen zurückgibt (z. B. "us-east-1", "eu-west-1"):
http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/regions/Regions.html#getCurrentRegion ()
quelle
Dies ist die sauberste Lösung, die ich gefunden habe:
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document |sed -n 's/ "region" : "\(.*\)"/\1/p'
Z.B,
export REGION=$(curl -s http://169.254.169.254/latest/dynamic/instance-identity/document |sed -n 's/ "region" : "\(.*\)"/\1/p')
quelle
Dank https://unix.stackexchange.com/a/144330/135640 können wir mit bash 4.2+ einfach das letzte Zeichen aus der Verfügbarkeitszone entfernen:
Dies setzt voraus, dass AWS weiterhin ein einzelnes Zeichen für an die Region angehängte Verfügbarkeitszonen verwendet.
quelle
region=${region%?}
2 Liner, der funktioniert, solange Sie ec2.internal als Suchdomäne verwenden:
quelle
Für alle, die dies mit guter alter Powershell tun wollen
quelle
Oder machen Sie Ubuntu oder dieses Tool nicht zur Voraussetzung und tun Sie einfach:
quelle
Wenn Sie mit json arbeiten, verwenden Sie die richtigen Tools. jq in diesem Fall sehr mächtig.
quelle
Dies funktioniert sowohl für eu-central-1 als auch für die verschiedenen Buchstabenzonen. (Ich habe nicht genug Repräsentanten, um auf die oben genannte Antwort zu antworten.)
quelle
ec2metadata --availability-zone | sed 's/.$//'
(ohne Bindestrich) seinWenn Sie unter Windows arbeiten, können Sie diesen PowerShell-Einzeiler verwenden:
quelle
Ich habe auch nach einer Lösung gesucht, um eine Region aus der Instanz zu finden, und hier ist meine reine Bash-Lösung:
es sei denn, es gibt Regionen, in denen AZ mehr als zwei Buchstaben hat, die mir nicht bekannt sind.
quelle
Um Informationen zu dem EC2 zu erhalten, bei dem Sie angemeldet sind, können Sie das Tool ec2-metadata verwenden.
Sie können das Tool installieren, indem Sie diesem Link folgen . Nach der Installation des Tools können Sie ausführen
# ec2-metadata -z
um die Region herauszufinden.
Dieses Tool wird mit den neuesten (10.10) Ubuntu AMIs installiert.
quelle
ec2-metadata -z
Zeigt nur die Verfügbarkeitszone an, nicht die Region.Wenn Sie eine Region mit JS abrufen möchten, sollte dies funktionieren:
Dies war die Zuordnung, die von AWS DOCS als Antwort auf einen Metadaten-API-Aufruf gefunden wurde. Schneiden Sie einfach das letzte Zeichen, das funktionieren soll.
quelle
ec2metadata
(kein Bindestrich) ist der aktuelle Befehl, mit dem Sie alle aws-Hosting-Informationen zu Ihrer ec2-Box erhalten. Dies ist der eleganteste und sicherste Ansatz. (ec2-metadata
ist der alte, nicht mehr gültige Befehl.)quelle
Eine Methode, die nur egrep verwendet und auf den meisten Linux-Instanzen funktionieren sollte, die ohne zusätzliche Tools gestartet wurden. Ich habe dies anhand einer Liste aller aktuellen AWS-Regionen getestet, die alle übereinstimmen.
curl http://169.254.169.254/latest/meta-data/placement/availability-zone | egrep -o '(\w)+-(\w)+-[0-9]'
Erklärung des REGEX:
Wenn Sie dies in eine Variable umwandeln möchten, gehen Sie wie folgt vor:
region=$(curl http://169.254.169.254/latest/meta-data/placement/availability-zone | egrep -o '(\w)+-(\w)+-[0-9]')
quelle
Für die Sed- und Curl-Lösung scheint sich das Format etwas geändert zu haben. Für mich funktioniert
quelle
Irgendwann, seitdem die meisten dieser Antworten veröffentlicht wurden, hat AWS das Vernünftige getan und einen neuen Pfad implementiert :
latest/meta-data/placement/region
.Dies bedeutet, dass das Abrufen der Region so einfach wie möglich sein sollte
quelle