2012-10-09 10 views
5

botoを使用している場合、Amazon aws python API。ec2 python API botoでは、SpotInstanceRequestからspot_idを取得する方法は?

ec2_connection.request_spot_instances(...) 
# This will return an ResultSet of SpotInstanceRequest 

SpotInstanceRequestからinstance_idsを取得するにはどうすればよいですか?

UPDATE:私はたくさんの演奏やgoogleing後、このヘルプを願って、このようにそれをやった:

ec2_connection.get_all_spot_instance_requests(request_ids=[my_spot_request_id, ]) 

これは戻りますが更新SpotInstanceRequestインスタンスは準備ができたとき、私たちそこから* instance_id *を取得できます。

答えて

6

私は似た何かをした:

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) 
+1

の代わりにやって ': ec2_connection.request_spot_instances(...) によって返されたスポットインスタンスのリクエストIDが conn.get_all_spot_instance_requests(...) の結果でインスタンスにマッチしているかどうかを確認するために定期的に確認'' while job_instance_id == None: '' 'あなたはもっとpythonicなやり方でできます - ' ''ではなくjob_instance_id: '' ' – iamkhush

0
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)) 
関連する問題