我用的是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)。为什么?在
我认为这里的问题是您不能使用BlockDeviceMapping将现有卷附加到实例上。BlockDeviceMapping允许您指定卷大小或snapshot-id。如果指定大小,它将创建一个新的、具有该大小的空白卷,并将其附加到指定的设备上。如果指定快照id,它将从该快照创建一个新卷并附加它。在
如果要将现有卷附加到实例,则必须使用
attach_volume
方法,该方法只能在拥有实例ID后运行那么,您可能会问,为什么boto的EBSBlockDeviceType有一个
volume_id
属性?这是因为当我们执行get_all_instances
调用时,AWS为BlockDeviceMapping返回的数据包括当前连接的EBS卷的volume_id
。在相关问题 更多 >
编程相关推荐