我正在使用AWS,Python和Boto library。使用Boto輪詢停止或啓動EC2實例
我想在Boto EC2實例上調用.start()
或.stop()
,然後「輪詢」它直到它完成。
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
然而,在最後while
循環,狀態似乎得到「卡」在任「待定」或「停止」。強調「似乎」,從我的AWS控制檯,我可以看到實際上確實使它「開始」或「停止」。
我能解決這個問題的唯一辦法就是召回在while
循環.get_all_reservations()
,像這樣:
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
是否有打電話讓instance
將報告的實際狀態的方法?
完美 - 工作恰到好處。不是沒有,但我想說:我讀了文檔,我只是加倍檢查...這種方法是不是在寫這篇文章的文檔!再次感謝。 – 2014-10-21 20:34:05
@garnaat請編輯你的答案並在boto3中添加boto3的指令,而不是'update()'你需要使用'load()' - 供將來的用戶看 – bluesummers 2017-06-28 09:52:33