Boto3 wait_until_exists未等待AMI变为available状态问题求助
问题解答:AWS AMI等待状态未生效的原因及修复方案
嘿Ben,我一眼就看出问题所在啦——你确实误解了wait_until_exists方法的用途!
问题根源
wait_until_exists这个方法的作用只是等待AMI资源在AWS系统中被创建出来(即“存在”),而不是等待它的状态变为available。当你调用create_image后,AWS立刻会生成一个处于pending状态的AMI记录,这时候它已经满足“存在”的条件了,所以wait_until_exists会直接结束等待,导致你看到两次时间戳几乎一致。
正确的解决方案
AWS的boto3 AMI对象专门提供了wait_until_available()方法,这个方法就是用来等待AMI状态变为available的,完全符合你的需求。修改后的代码如下:
import boto3 from datetime import datetime ec2 = boto3.resource('ec2', region_name='eu-north-1') instance = ec2.Instance('<some id value>') create_ami = instance.create_image(Name='Test8') try: print(datetime.now()) # 替换为专门等待available状态的方法 create_ami.wait_until_available() print('success: ami now available') print(datetime.now()) except Exception as e: print(e)
额外优化(可选)
如果你需要自定义等待的间隔时间或超时时间,可以通过WaiterConfig参数调整,比如每30秒检查一次,最长等待30分钟:
create_ami.wait_until_available( WaiterConfig={ 'Delay': 30, # 每次检查间隔30秒 'MaxAttempts': 60 # 最多检查60次,总时长30*60=1800秒=30分钟 } )
补充说明
你之前传入的过滤器参数其实是多余的,wait_until_available内部已经默认检查当前AMI的状态是否为available,不需要额外指定。而wait_until_exists的过滤器是用来筛选“存在的资源”,但它不会持续等待状态变化,只要有符合条件的资源存在就会立即返回。
内容的提问来源于stack exchange,提问作者user7925487
相关产品推荐
相关产品推荐

