使用ec2 python API boto,如何从SpotInstanceRequest获取spot实例id?

使用ec2 python API boto,如何从SpotInstanceRequest获取spot实例id?,python,amazon-ec2,Python,Amazon Ec2,当使用boto时,Amazon aws python API ec2_connection.request_spot_instances(...) # This will return an ResultSet of SpotInstanceRequest 如何从SpotInstanceRequest获取实例ID 更新:我是这样做的,在玩了很多游戏和谷歌搜索之后,希望这对我有所帮助: ec2_connection.get_all_spot_instance_requests(request_i

当使用boto时,Amazon aws python API

ec2_connection.request_spot_instances(...)
# This will return an ResultSet of SpotInstanceRequest
如何从
SpotInstanceRequest
获取实例ID

更新:我是这样做的,在玩了很多游戏和谷歌搜索之后,希望这对我有所帮助:

ec2_connection.get_all_spot_instance_requests(request_ids=[my_spot_request_id, ])

这将返回更新后的
SpotInstanceRequest
,当实例准备就绪时,我们可以从中获取*instance\u id*。

我做了类似的事情:定期检查以查看
ec2\u连接。请求\u点\u实例(…)
与的结果中的实例匹配
conn.get\u all\u spot\u instance\u请求(…)
:


当作业\u实例\u id==None:时,您可以用一种更具python风格的方式来代替执行
,而不是执行作业\u实例\u id:
conn = boto.ec2.connect_to_region(region_name=region_name, aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_secret_access_key)
req = conn.request_spot_instances(price=MAX_SPOT_BID,instance_type=instance_type,image_id=AMI_ID,availability_zone_group=region_name,key_name=KEY_PAIR_PEM[:-4],security_groups=security_groups)
job_instance_id = None
while job_instance_id == None:
    print "checking job instance id for this spot request"
    job_sir_id = req[0].id # spot instance request = sir, job_ is the relevant aws item for this job
    reqs = conn.get_all_spot_instance_requests()
    for sir in reqs:
        if sir.id == job_sir_id:
            job_instance_id = sir.instance_id
            print "job instance id: " + str(job_instance_id)
            break
    time.sleep(SPINUP_WAIT_TIME)
spot_instance_requests = aws.ec2_get_connection().request_spot_instances(...)
MAX_MINUTES = 180
spot_instance_request_ids = [sir.id for sir in spot_instance_requests]
for _ in range(MAX_MINUTES):
    log.info('waiting for spot instances to start', request_ids=spot_instance_request_ids, seconds=60)
    time.sleep(60)
    spot_instance_requests = aws.ec2_get_connection().get_all_spot_instance_requests(
        request_ids=spot_instance_request_ids)
    if any(sir.instance_id for sir in spot_instance_requests):
        log.info('spot instance started. waiting...', seconds=60*5)
        time.sleep(60*5)
        break
else:
    raise Exception("Spot instances didn't start in {0} minutes!".format(MAX_MINUTES))