Ich habe gerade angefangen, Amazon EC2 API in Java zu verwenden.
Ich habe Instanzen mit ec2.runInstances (runInstancesRequest) erstellt;
Aber es wird einige Zeit dauern, bis die Instanz gestartet wird (normalerweise 1-2 Minuten). Ich brauche den öffentlichen DNS der Maschine über Java EC2 API.
Woher weiß ich, wann die Instanzen vom Status "anstehend" in den Status "verarbeitet" wechseln und wie kann ich das öffentliche DNS der EC2-Instanz über die API EC2 abrufen?
Vielen Dank im Voraus. Kanna
Es gibt kein Ereignismodell oder ein anderes Signal, das vom SDK ausgelöst wird, um Ihnen mitzuteilen, wenn ein EC2-Objekt den Status ändert - die einzige Möglichkeit, dies herauszufinden, ist, einen DescribeXXXXXXXX-Aufruf für das Objekt wiederholt auszuführen, etwa einmal alle 30 Sekunden , bis sich das Statusfeld ändert.
Es gibt eine endliche Mindestzeit für die Ausführung und die Antwort des Aufrufs. Daher müssen Sie ein Intervall finden, das keine Anforderungen auslöst, bevor der vorherige abgeschlossen wurde. Oder warten Sie einfach auf die Antwort und warten Sie dann weitere 'n' Sekunden, bevor Sie den Anruf erneut tätigen. Sie möchten die AWS-API auch nicht mit schnellen Anforderungen spammen, auch wenn sie zwischen den Antworten zeitlich festgelegt sind. In meiner Controller-Anwendung stelle ich das Intervall auf 30 Sekunden ein, gebe die Anfrage aus, warte auf die Antwort und subtrahiere dann die verstrichene Zeit von dem Intervall und schlaf so lange. In einem Multithread-Modell kann ich dadurch Zustandsänderungen an vielen Objekten gleichzeitig verfolgen, ohne meine lokale CPU oder die API zu überlasten.
Sobald die Zustandsänderung erkannt wurde (und vorausgesetzt, dass der neue Zustand erwartet wird - vergessen Sie nicht, Fehlermodi zu behandeln), können Sie eine Vielzahl von beschreibenden Informationen erhalten, einschließlich der öffentlichen DNS-Adresse (im Falle von Instanzobjekte) aus der Struktur, die im API-Antwortobjekt zurückgegeben wird.
Tatsächlich können Sie POLLEN, um den Status einer Instanz herauszufinden. Hier ist ein Bash-Code, um das zu tun, passen Sie es einfach an JAVA an. Sie haben möglicherweise einen ähnlichen Befehl im Java SDK, so dass Sie keine Ausführung von Bash aus Java durchführen müssen. Der Befehl 'ec2-describe-instances' kommt von der Amazon AWS CLI . Ich würde die Funktion oder Methode starten, um auf den Ausführungsstatus zu warten, um zu testen, ob die Instanz "ausstehend" ist, und fehlschlagen, wenn sie nicht gestartet wird oder aussteht. Dann notieren Sie die Zeit und geben Sie ein Maximum von sagen wir 3 Minuten, und halten Sie einfach weiter, um in einer Schleife den Status "Laufen" zu erhalten, indem Sie nach dem 3-Minuten-Limit suchen. Kehren Sie zu dem Aufrufpunkt zurück, der zuerst eintritt, "nicht gestartet", "Startzeit überschritten" oder "ausgeführt".
%Vor%Tags und Links java amazon-web-services amazon-ec2 ec2-api-tools