【问题标题】:Missing virtual name for block device mapping. Launching EC2 instance failed缺少块设备映射的虚拟名称。启动 EC2 实例失败
【发布时间】:2014-01-17 13:36:29
【问题描述】:
我的aws 自动缩放有一点问题。我已经准备好 AMI,并且还创建了启动配置。我将我的配置与自动缩放组绑定。一切似乎都正常,但随后我收到以下错误报告:
启动一个新的 EC2 实例。状态原因:缺少块设备映射的虚拟名称。启动 EC2 实例失败。
我可以创建这个 AMI 的一个实例,这没问题,但自动缩放不起作用。这个实例是基于实例存储的,所以我们不使用任何 EBS。也许我错过了什么?
【问题讨论】:
标签:
amazon-web-services
amazon-ec2
autoscaling
【解决方案1】:
这很可能是因为您在与最终自动缩放目标不同的实例类型上构建实例存储映像。在 m1.small 上创建实例映像然后尝试启动 m3.large 时,我遇到了完全相同的情况。
这是因为捆绑和注册过程以及实例 AMI 从主机 VM(在我的情况下为 m1.small)获取块设备映射并将其编码为图像清单中的 xml。这很可能引用了多个临时虚拟卷(ephemeral0、ephemeral1 等)。当此 AMI 在自动扩展操作期间使用不具有相同对应卷的实例类型启动时,您会收到此错误消息。
正如您所提到的,它可以作为独立的虚拟机正常启动(不是自动缩放的一部分)。 AWS 所做的某些事情似乎可以弥补用户触发的实例 AMI 启动中的这种不匹配。
解决方案是在创建 AMI 时显式设置块储存设备映射以匹配您的预期实例类型。
在此处阅读有关块设备映射的更多信息:(http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html)
然后使用带有 --block-device-mapping 标志的ec2-bundle-vol 命令告诉工具忽略主机虚拟机当前的块设备。
对我有用的命令如下(在 m1.small 上创建并在 m3.large 上自动缩放的图像):
ec2-bundle-vol <lots of other flags snipped> --block-device-mapping ami=sda1,root=/dev/sda1,ephemeral0=sdb,swap=sda3