Get Instanz-id der EC2-Instanz, die über Java
Habe ich eine AWS EC2-Instanz bereitgestellt, und ich brauche, um herauszufinden, Ihre öffentliche IP-Adresse. Howver, zu wissen, dass ich muss zuerst wissen, der Instanz-id von meinem Beispiel.
Ziel:
- Ich habe einen Java-code läuft in meinem Beispiel, und ich möchte, dass code herausfinden, die aktuelle IP-oder Instanz-ID der Instanz, wo es ausgeführt wird.
Nach der Lektüre der Amazon-Dokumentation kam ich mit einer Java-Methode gibt die IP an alle Instanzen, aber das ist nicht das, was ich will, ich möchte eine Methode, die zurückgibt, wird nur die Instanz-id oder die öffentliche IP-Adresse der ausgeführten Instanz.
/**
* Returns a list with the public IPs of all the active instances, which are
* returned by the {@link #getActiveInstances()} method.
*
* @return a list with the public IPs of all the active instances.
* @see #getActiveInstances()
* */
public List<String> getPublicIPs(){
List<String> publicIpsList = new LinkedList<String>();
//if there are no active instances, we return immediately to avoid extra
//computations.
if(!areAnyActive())
return publicIpsList;
DescribeInstancesRequest request = new DescribeInstancesRequest();
request.setInstanceIds(instanceIds);
DescribeInstancesResult result = ec2.describeInstances(request);
List<Reservation> reservations = result.getReservations();
List<Instance> instances;
for(Reservation res : reservations){
instances = res.getInstances();
for(Instance ins : instances){
LOG.info("PublicIP from " + ins.getImageId() + " is " + ins.getPublicIpAddress());
publicIpsList.add(ins.getPublicIpAddress());
}
}
return publicIpsList;
}
In diesem code habe ich ein array mit den Instanz-ids aller aktiven Instanzen, aber ich weiß nicht, ob Sie "mich" oder nicht. Also gehe ich davon aus, dass mein Erster Schritt würde sein, zu wissen, wer ich bin, und dann zu Fragen für meine öffentliche IP-Adresse.
Gibt es eine änderung, die ich tun kann, um die Vorherige Methode, um mir zu geben was ich will? Gibt es einen effizienteren Weg, es zu tun?
- hier die Lösung: codeflex.co/java-get-ec2-private-public-ip-und-instance-id
Du musst angemeldet sein, um einen Kommentar abzugeben.
ich bin kein java-Typ. Aber, meine unten, ruby-code druckt dasInstance ID
undPublic IP
desrunning
- Instanzen, wie Sie gebraucht:Alles, was Sie tun müssen, ist finden sich entsprechende Methoden/Aufrufe im JAVA-SDK-Dokumentation. Der code, den Sie betrachten sollten ist:
In den oben block, ich bin herausfiltern nur die läuft Instanzen.
UND
Im obigen code-block, den ich bin mit 2
for
Schleifen und zieheninstance.instance_id
sowieinstance.public_ip_address
.Als JAVA-SDK und Ruby-SDK sind beide schlagen die AWS EC2-APIs, muss es ähnliche Einstellungen im JAVA-SDK.
Auch Deine Frage ist so vage in dem Sinne, sind Sie die Ausführung des JAVA-Codes von der Instanz, deren Instanz-id wird benötigt? ODER Sind Sie die Ausführung von java-code aus einer anderen Instanz und möchten, ziehen Sie den Instanz-ids aller Laufenden Instanzen?UPDATE:
Aktualisierung der Antworten, die Frage hat sich geändert:
AWS bietet meta-Daten-service auf jede Instanz, die gestartet wird. Sie können eine Umfrage der meta-Daten-service lokal zu finden, aus der die benötigten Informationen.
Form bash promp, unten bereitgestellten Befehl die Instanz-id und die öffentliche IP-Adresse der Instanz
Müssen Sie herausfinden, wie Sie ziehen die Daten aus oben genannten URLs in java. An diesem Punkt , Sie haben genügend Informationen, und diese Frage ist irrelevant im Hinblick auf AWS-weil das ist jetzt mehr eine JAVA Frage auf, wie man Umfrage über URLs.
Ich würde vorschlagen/empfehlen die Verwendung von AWS SDK für Java.
Es sei denn Java8 ist verfügbar, diese müssen mehr boilercode. Aber in der nussschale, das ist es.
https://stackoverflow.com/a/30317951/525238 schon erwähnt hat die EC2MetadataUtils, aber diese hier umfasst die Zusammenarbeit code auch.
Du willst die com.amazonaws.util.EC2MetadataUtils Klasse von der aws-java-sdk.
Folgende Methode zurück, die EC2-Instance-ID.
Von hier aus können Sie dann Folgendes tun, um Informationen wie die IP-Adresse (in diesem Beispiel die privateIP):
Können Sie diese auch verwenden, um alle Arten von relevanten Informationen über die aktuelle Instanz der Java-Programm ausgeführt wird; ersetzen Sie einfach
.getPrivateIPAddress()
mit den entsprechenden get-Befehl für die info, die Sie suchen. Liste der verfügbaren Befehle finden hier.Edit: Für diejenigen, die sich vielleicht scheuen, mit diesem, aufgrund der "unbekannten" URL; siehe Amazon ' s Dokumentation zu dem Thema, die Punkte direkt auf die gleiche URL; nur mit dem Unterschied, Sie tun es über cli-eher als in Java. http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html
Antwort auf die erste Frage von
Kann man in Java über die AWS-API:
Diese wird direkt geben Sie die öffentliche IP-falls vorhanden
Hier könnte die Metadaten-Dienst zu Holen, diese mit HTTP:
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html
ex:
War ich, dass zu viele Operationen mit Amazon EC2. Dann habe ich implementiert eine utility-Klasse für diese Operationen. Vielleicht kann es sein, util, um jemanden, der hier ankommen. Ich, implementiert unter Verwendung von AWS SDK für java-version 2. Die Operationen sind:
AmazonEC2 Klasse:
AmazonCredentials Klasse:
CloudManagementException Klasse:
Anmeldeinformationen.profile:
Ich hoffe, helfen, o/