Erhalte Instanz-ID der EC2-Instanz über Java

8

Ich habe eine AWS EC2-Instanz bereitgestellt und muss die öffentliche IP-Adresse ermitteln. Wie auch immer, um zu wissen, dass ich zuerst die Instanz-ID meiner Instanz kennen muss.

Ziel:

  • Ich habe einen Java-Code in meiner Instanz ausgeführt, und ich möchte, dass dieser Code die aktuelle IP oder Instanz-ID der Instanz ermittelt, in der er ausgeführt wird.

Nach dem Lesen der Amazon-Dokumentation habe ich eine Java-Methode entwickelt, die die IP aller Instanzen zurückgibt, aber das möchte ich nicht . Ich möchte eine Methode, die nur die Instanz-ID oder die öffentliche IP-Adresse der laufenden Instanz.

%Vor%

In diesem Code habe ich ein Array mit den Instanz-IDs aller aktiven Instanzen, aber ich weiß nicht, ob sie "ich" sind oder nicht. Also gehe ich davon aus, dass mein erster Schritt darin besteht, zu wissen, wer ich bin, und dann nach meiner öffentlichen IP-Adresse zu fragen.

Gibt es eine Veränderung, die ich mit der vorherigen Methode machen kann, um mir zu geben, was ich will? Gibt es einen effizienteren Weg, es zu tun?

    
Flame_Phoenix 15.04.2014, 11:05
quelle

6 Antworten

3

Ich bin kein Java-Typ. Allerdings druckt mein Ruby-Code die Instance ID und Public IP der running Instanzen wie benötigt:

%Vor%

Sie müssen lediglich die entsprechenden Methoden / Aufrufe in der JAVA SDK-Dokumentation finden. Der Code, den Sie betrachten sollten, ist:

%Vor%

Im obigen Block filtere ich nur die laufenden Instanzen.

AND

%Vor%

Im obigen Codeblock laufe ich 2 for loops und ziehe instance.instance_id sowie instance.public_ip_address .

Da JAVA SDK und Ruby SDK beide die gleichen AWS EC2-APIs verwenden, müssen ähnliche Einstellungen in JAVA SDK vorhanden sein.

Auch Ihre Frage ist vage in dem Sinne, führen Sie den JAVA-Code von der Instanz aus, deren Instanz-ID benötigt wird? ODER Führen Sie den Java-Code von einer anderen Instanz aus und möchten die Instanz-IDs aller laufenden Instanzen abrufen?

UPDATE:

Aktualisieren der Antworten, wenn sich die Frage geändert hat:

AWS stellt bei jeder gestarteten Instanz einen Metadaten-Service zur Verfügung. Sie können den Metadatendienst lokal abfragen, um die erforderlichen Informationen zu erhalten.

Form bash promp, unter Befehl lieferte die Instanz-ID und die öffentliche IP-Adresse der Instanz

%Vor%

Sie müssen herausfinden, wie Sie Daten von obigen URLs in Java ziehen. An diesem Punkt haben Sie genügend Informationen und diese Frage ist in Bezug auf AWS irrelevant, da dies jetzt eher eine JAVA-Frage ist, wie Sie über URLs abfragen können.

    
slayedbylucifer 15.04.2014, 14:47
quelle
25

Ich würde die Verwendung des AWS-SDK für Java vorschlagen / empfehlen.

%Vor%

Wenn Java8 nicht verfügbar ist, wird mehr Code benötigt. Aber in aller Kürze, das ist es.

Ссылка hat bereits die EC2MetadataUtils erwähnt, aber hier ist auch der Arbeitscode enthalten.

    
knalli 21.05.2015 13:45
quelle
21

Sie möchten die com.amazonaws.util.EC2MetadataUtils Klasse von der aws-java-sdk.

    
heldeen 19.05.2015 06:10
quelle
2

Die folgende Methode gibt die EC2-Instanz-ID zurück.

%Vor%

Von hier aus können Sie dann Folgendes tun, um Informationen wie die IP-Adresse (in diesem Beispiel das privateIP) zu erhalten:

%Vor%

Sie können dies auch verwenden, um alle Arten von relevanten Informationen über die aktuelle Instanz zu erhalten, auf der das Java-Programm läuft; Ersetzen Sie einfach .getPrivateIPAddress() durch den entsprechenden Befehl get für die gesuchten Informationen. Liste der verfügbaren Befehle kann hier .

Edit: Für diejenigen, die dies aufgrund der "unbekannten" URL scheuen könnten; Siehe die Amazon-Dokumentation zu diesem Thema, die direkt auf dieselbe URL verweist; Der einzige Unterschied ist, dass sie es nicht über Java, sondern über CLI tun. Ссылка

    
DGolberg 04.09.2014 21:44
quelle
2

Um die erste Frage von

zu beantworten
  

Ich habe eine AWS EC2-Instanz bereitgestellt und muss die öffentliche IP-Adresse herausfinden.

Sie können in Java die AWS-API verwenden:

%Vor%

Damit erhalten Sie direkt die öffentliche IP-Adresse, falls eine existiert

    
Max Dor 18.02.2016 20:52
quelle
1

Sie können den Metadatendienst verwenden, um dies über HTTP abzurufen: Ссылка

ex:

%Vor%     
Julio_AWS_DevRel 15.04.2014 12:20
quelle