2013-02-09 82 views
1

我使用博託中,這樣的代碼:如何在AWS上請求現貨實例時附加現有的EBS卷?

dev_xvdb = boto.ec2.blockdevicemapping.EBSBlockDeviceType(volume_id='vol-xxxxxx') 
bdm = boto.ec2.blockdevicemapping.BlockDeviceMapping() 
bdm['/dev/xvdb'] = dev_xvdb 

rs = ec2.request_spot_instances(price=MY_MAX_PRICE, 
           image_id='ami-xxxxx', 
           count=1, 
           type='one-time', 
           key_name='MY_KEY_NAME', 
           security_groups=['default'], 
           instance_type='t1.micro', 
           block_device_map=bdm) 

該代碼可以正常運行,但不能附加EBS卷(ID =體積-XXXXXX)。爲什麼?

回答

2

我認爲這裏的問題是,您不能使用BlockDeviceMapping將現有卷附加到實例。 BlockDeviceMapping允許您指定卷大小或快照ID。如果指定了大小,它將創建一個新的空白大小的卷並將其附加到您指定的設備。如果您指定快照ID,它將從該快照創建一個新卷並附加它。

如果要將現有卷附加到實例,則必須使用只有在擁有實例ID後才能運行的attach_volume方法。

爲什麼然後,你可能會問,博託的EBSBlockDeviceType有一個volume_id屬性?這是因爲當我們進行get_all_instances調用時,AWS返回的BlockDeviceMapping數據包括當前連接的EBS卷的volume_id

相關問題