使用ec2 python API boto,如何从SpotInstanceRequest获取spot instance_id?

And*_*510 5 python amazon-ec2

使用boto时,亚马逊aws是python API.

ec2_connection.request_spot_instances(...)
# This will return an ResultSet of SpotInstanceRequest
Run Code Online (Sandbox Code Playgroud)

如何从中获取instance_ids SpotInstanceRequest

更新:我这样做了,经过大量的游戏和googleing,希望这个帮助:

ec2_connection.get_all_spot_instance_requests(request_ids=[my_spot_request_id, ])
Run Code Online (Sandbox Code Playgroud)

这将返回更新的 SpotInstanceRequest,当实例准备就绪时,我们可以从中获取*instance_id*.

use*_*293 6

我做了类似的事情:定期检查以查看返回的spot实例请求ID ec2_connection.request_spot_instances(...) 是否与结果中的实例匹配 conn.get_all_spot_instance_requests(...) :

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)
Run Code Online (Sandbox Code Playgroud)