我正在使用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)。为什么呢?
答案 0 :(得分:3)
我认为这里的问题是您无法使用BlockDeviceMapping将现有卷附加到实例。 BlockDeviceMapping允许您指定卷大小或快照ID。如果指定大小,它将创建该大小的新空白卷,并将其附加到您指定的设备。如果您指定了snapshot-id,它将从该快照创建一个新卷并附加它。
如果要将现有卷附加到实例,则必须使用attach_volume
方法,该方法只能在具有实例ID后才能运行。
为什么然后,您可能会问,boto的EBSBlockDeviceType是否具有volume_id
属性?这是因为当我们进行get_all_instances
调用时,AWS为BlockDeviceMapping返回的数据包括当前连接的EBS卷的volume_id
。