在AWS上请求现场实例时,如何附加现有EBS卷?

时间:2013-02-09 03:07:33

标签: python amazon-web-services amazon-ec2 boto

我正在使用boto,代码如下:

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 = vol-xxxxxx)。为什么呢?

1 个答案:

答案 0 :(得分:3)

我认为这里的问题是您无法使用BlockDeviceMapping将现有卷附加到实例。 BlockDeviceMapping允许您指定卷大小或快照ID。如果指定大小,它将创建该大小的新空白卷,并将其附加到您指定的设备。如果您指定了snapshot-id,它将从该快照创建一个新卷并附加它。

如果要将现有卷附加到实例,则必须使用attach_volume方法,该方法只能在具有实例ID后才能运行。

为什么然后,您可能会问,boto的EBSBlockDeviceType是否具有volume_id属性?这是因为当我们进行get_all_instances调用时,AWS为BlockDeviceMapping返回的数据包括当前连接的EBS卷的volume_id