本文介绍了boto3 wait_until_running无法正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用boto3编写脚本来启动实例并等待其启动.根据wait_until_running的文档,它应该等待直到实例完全启动(我假设检查应该可以),但是不幸的是,它仅适用于wait_until_stopped,并且在wait_until_running的情况下,它只是启动实例,而不会等待直到实例完成.完全开始.不知道我在这里做错什么了吗,或者这是boto3的错误.

I'm trying to write a script using boto3 to start an instance and wait until it is started. As per the documentation of wait_until_running, it should wait until the instance is fully started (I"m assuming checks should be OK) but unfortunately it only works for wait_until_stopped and incase of wait_until_running it just starts the instance and doesn't wait until it is completely started. Not sure if I'm doing something wrong here or this is a bug of boto3.

这是代码:

import boto3


ec2 = boto3.resource('ec2',region_name="ap-southeast-2")
ec2_id = 'i-xxxxxxxx'
instance = ec2.Instance(id=ec2_id)
print("starting instance " + ec2_id)
instance.start()
instance.wait_until_running()
print("instance started")

推荐答案

感谢 @Mark B @Madhurya Gandi 这是适用于我的解决方案:

Thanks to @Mark B @Madhurya Gandi here is the solution that worked in my case:

import boto3,socket
retries = 10
retry_delay=10
retry_count = 0
ec2 = boto3.resource('ec2',region_name="ap-southeast-2")
ec2_id = 'i-xxxxxxxx'
instance = ec2.Instance(id=ec2_id)
print("starting instance " + ec2_id)
instance.start()
instance.wait_until_running()
while retry_count <= retries:
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    result = sock.connect_ex((instance.public_ip_address,22))
    if result == 0:
        Print "Instance is UP & accessible on port 22, the IP address is:  ",instance.public_ip_address
        break
    else:
        print "instance is still down retrying . . . "
        time.sleep(retry_delay)
   except ClientError as e:
       print('Error', e)

这篇关于boto3 wait_until_running无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-18 12:52