启动多个实例并等待它们完全使用boto3启动

时间:2017-11-10 14:33:22

标签: amazon-web-services amazon-ec2 boto3

我正在使用以下代码

开始一堆EC2 Instances
def start_ec2_instances(self, instanceids):
    ec2client = boto3.resource('ec2')
    response = ec2client.start_instances(InstanceIds=instanceids)
    return

现在它成功启动。但是,我想使用wait_until_running方法检查实例的状态,并等待所有实例都启动。

wait_until_running方法只能在单个实例上发布?如何等待使用boto3

启动的实例列表

这就是我目前正在做的事情。但想知道是否有其他方法可以一次性完成

def wait_until_instance_running(self, instanceids):
    ec2 = boto3.resource('ec2')
    for instanceid in instanceids:
        instance = ec2.Instance(instanceid)
        logger.info("Check the state of instance: %s",instanceid)
        instance.wait_until_running()
    return

2 个答案:

答案 0 :(得分:5)

使用

试试这个:

ec2 = boto3.client('ec2')
start_ec2_instances(instanceids)
waiter = ec2.get_waiter('instance_running')
waiter.wait(InstanceIds=instanceids)

服务员功能每15秒轮询一次,直到达到成功状态。 40次检查失败后返回错误。

答案 1 :(得分:1)

您可以使用EC2客户端Waiter.wait调用来传递EC2实例ID数组。

http://boto3.readthedocs.io/en/latest/reference/services/ec2.html#EC2.Waiter.InstanceRunning