2013-09-27 7 views
6

Chciałbym utworzyć nową instancję opartą na moim zapisanym AMI.EC2: Oczekiwanie na zakończenie nowej instancji

to osiągnąć za pomocą następującego kodu:

RunInstancesRequest rir = new RunInstancesRequest(imageId,1, 1); 
// Code for configuring the settings of the new instance 
... 
RunInstancesResult runResult = ec2.runInstances(rir); 

Jednak nie mogę znaleźć poczekać na „block”/czekać aż instancja jest uruchomiony oprócz Thread.currentThread() sleep (xxxx.) dowództwo.

Z drugiej strony, StartInstancesResult i TerminateInstancesResult daje sposób na dostęp do stanu instancji i być w stanie monitorować wszelkie zmiany. Ale co ze stanem zupełnie nowej instancji?

Odpowiedz

3

Oczekiwanie na przygotowanie instancji EC2 jest wspólnym schematem. W bibliotece boto Pythona również rozwiązać ten z sleep połączeń:

reservation = conn.run_instances([Instance configuration here]) 
    instance = reservation.instances[0] 

    while instance.state != 'running': 
     print '...instance is %s' % instance.state 
     time.sleep(10) 
     instance.update() 

Z tego mechanizmu będzie można sondować, gdy nowa instancja będzie wymyślić.

+0

Nie wiedziałem istniała metoda aktualizacji. To bardzo dobrze wiedzieć. Dziękuję Ci. ** Jednak **, obecnie najlepszym rozwiązaniem jest @Zags 'instance.wait_until_running()' –

+0

@BrunoBronosky to zależy od twojego celu. Muszę poczekać, aż instancja się uruchomi i sprawdzą status. Na tej podstawie nie można użyć rozwiązania Zags, ponieważ rozwiązanie to zostanie natychmiast rozwiązane. – tyron

1

W zależności od tego, co próbujesz zrobić (i ilu serwerów planujesz uruchomić), zamiast odpytywania dla zdarzeń startowych instancji, możesz zainstalować na AMI prosty program/skrypt uruchamiany raz, gdy instancja się rozpocznie i wysyła powiadomienie w tym celu, tj. do tematu AWNS SNS.

Proces, który musi wiedzieć o uruchamianiu nowych serwerów, może następnie zasubskrybować ten temat SNS i będzie otrzymywać powiadomienia push przy każdym uruchomieniu serwera.

Rozwiązuje ten sam problem pod innym kątem; twój przebieg może się różnić.

8

Od AWS CLI changelog for v1.6.0:

Dodaj Komenda oczekiwania, które pozwala na polecenie zablokować dopóki AWS zasobów osiągnie dany stan (issue 992, issue 985)

nie widzę zostało to opisane w dokumentacji, ale dla mnie działało:

aws ec2 start-instances --instance-ids "i-XXXXXXXX" 
aws ec2 wait instance-running --instance-ids "i-XXXXXXXX" 

Linia wait instance-running nie została zakończona do momentu uruchomienia instancji EC2.

Nie używam Python/boto/botocore, ale zakładam, że ma coś podobnego. Sprawdź waiter.py on Github.

11

boto3 posiada:

instance.wait_until_running()