Sto usando AWS, Python e lo Boto library.Polling di un'istanza di arresto o di avvio EC2 con Boto
Vorrei invocare .start()
o .stop()
su un'istanza Boto EC2, quindi "eseguire il polling" fino al completamento.
import boto.ec2
credentials = {
'aws_access_key_id': 'yadayada',
'aws_secret_access_key': 'rigamarole',
}
def toggle_instance_state():
conn = boto.ec2.connect_to_region("us-east-1", **credentials)
reservations = conn.get_all_reservations()
instance = reservations[0].instances[0]
state = instance.state
if state == 'stopped':
instance.start()
elif state == 'running':
instance.stop()
state = instance.state
while state not in ('running', 'stopped'):
sleep(5)
state = instance.state
print " state:", state
Tuttavia, nel while
ciclo finale, lo Stato sembra avere "bloccato" sia a "in attesa" o "arresto". L'enfasi su "sembra", come dalla mia console AWS, posso vedere che l'istanza in effetti lo fa "avviato" o "fermato".
L'unico modo ho potuto risolvere questo problema è stato quello di richiamare .get_all_reservations()
nel ciclo while
, in questo modo:
while state not in ('running', 'stopped'):
sleep(5)
# added this line:
instance = conn.get_all_reservations()[0].instances[0]
state = instance.state
print " state:", state
Esiste un metodo da chiamare in modo che il instance
segnalerà lo stato attuale?
Perfetto: ha funzionato bene. Non per niente, ma volevo affermare: ho letto i documenti e ho appena controllato due volte ... questo metodo NON è nei documenti al momento della stesura di questo articolo! Grazie ancora. –
@garnaat per favore modifica la tua risposta e aggiungi le istruzioni per boto3, in boto3 invece di 'update()' devi usare 'load()' - per i futuri utenti vedere – bluesummers