con*_*led 4 disk-volume amazon-ec2 amazon-ebs amazon-web-services
我想使用 python boto 库启动一个 EC2 实例,并附加一个先前创建的 EBS 卷(除了根卷)。
连接后,我通过名称标签查找卷,并尝试创建包含该卷的块设备列表。我遇到了各种错误,但最终创建了以下代码,该代码至少成功启动了一个实例。
volumes=conn.get_all_volumes(filters={'tag:Name':'TestVolume'})
vol=volumes[0]
print repr(vol)
disks=ec2.blockdevicemapping.BlockDeviceMapping()
xvdf=ec2.blockdevicemapping.BlockDeviceType(volume_id=vol.id,
size=vol.size,volume_type=vol.type)
disks['/dev/xvdf']=xvdf
base_image="ami-9a562df2" #ubuntu 14.04
reservation=conn.run_instances(
base_image,
instance_type="t2.micro",
block_device_map=disks)
Run Code Online (Sandbox Code Playgroud)
打印语句显示它能够查找卷并报告正确的卷 ID。但是,当实例启动时,会创建一个新的未格式化的 32GB 卷并将其附加到该卷。
我很难找到说明这一点的文档。将特定 EBS 卷添加到 block_device_map 的正确方法是什么?
无法启动附加了现有 EBS 卷的新 EC2 实例。
相反,在新 EC2 实例启动后附加您现有的 EBS 卷。您有两个选择:
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html
编辑:根据评论添加了更多详细信息。
所有各种语言的 SDK 都调用基础 AWS API。查看基本的 AWS API 文档RunInstances:
http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html
在该命令上,有一个BlockDeviceMapping参数,如果您遵循它的数据结构,则不包含卷 ID 属性。
我不熟悉 Python SDK,但 SDK 可能会重载BlockDeviceMapping该类以表示启动规范(不允许卷 ID)和正在运行的实例的映射(可以包括卷 ID) .
我通常使用适用于 .NET 的 AWS 开发工具包,我很少参考特定于此的文档。我通常参考基本 API 文档(就像我上面提到的那样),然后我“找到”要在 .NET SDK 中使用的适当方法。但如果有差异,我认为基本 API 文档是正确的。
| 归档时间: |
|
| 查看次数: |
3303 次 |
| 最近记录: |