1

我正在使用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)。为什么?

4

1 回答 1

3

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

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

那么,你可能会问,为什么 boto 的 EBSBlockDeviceType 有一个volume_id属性呢?这是因为当我们进行get_all_instances调用时,AWS 返回的 BlockDeviceMapping 数据包括volume_id当前连接的 EBS 卷。

于 2013-02-09T14:26:25.630 回答