2013-09-27 40 views
6

我想基於存儲的AMI創建一個新實例。EC2:等待一個新實例處於運行狀態

我用下面的代碼實現這一點:

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

但是,我無法找到一個等待以「塊」 /等到實例,並將其從Thread.currentThread()運行除了睡眠(XXXX。 )命令。

另一方面,StartInstancesResult和TerminateInstancesResult爲您提供了訪問實例狀態並能夠監視任何更改的方法。但是,一個全新的實例狀態呢?

回答

3

等待EC2實例準備就緒是一種常見模式。在Python庫博託你也sleep電話解決這個問題:

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() 

有了這個機制,你將能夠輪詢當你的新實例上來了。

+0

我沒有意識到有一個更新的方法。這很好理解。謝謝。 **然而**,目前最好的解決方案是@Zags'instance.wait_until_running()' –

+0

@BrunoBronosky它取決於你的目標。我需要等到實例運行並且狀態檢查已經通過。基於此,您不能使用Zags解決方案,因爲這幾乎可以立即解決。 – tyron

1

根據您要做什麼(以及計劃啓動的服務器數量)而不是輪詢實例啓動事件,您可以在AMI上安裝一個簡單的程序/腳本,該程序/腳本在實例啓動時運行一次併發出通知以達到這種效果,即發送到AWS SNS主題。

需要了解新服務器啓動的流程然後可以訂閱此SNS主題,並且每次啓動服務器時都會收到推送通知。

從不同的角度解決相同的問題;你的旅費可能會改變。

8

AWS CLI changelog for v1.6.0

添加等待子命令,允許一個命令阻塞,直到一個AWS 資源達到給定的狀態(issue 992issue 985

我沒有看到這在文檔中提到,但以下工作適合我:

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

直到EC2實例運行時,wait instance-running行才完成。

我不使用Python/boto/botocore,但假設它有類似的東西。檢查出waiter.py on Github

11

boto3有:

instance.wait_until_running() 
相關問題