2013-09-27 37 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() 
相关问题