首页 文章

缺少块设备映射的虚拟名称 . 启动EC2实例失败

提问于
浏览
3

我的 aws autoscaling有点问题 . 我准备好了AMI,并且还创建了启动配置 . 我将配置与autoscaling组绑定 . 一切似乎工作正常,但后来我收到以下错误报告:

启动新的EC2实例 . 状态原因:缺少块设备映射的虚拟名称 . 启动EC2实例失败 .

我可以创建这个AMI的实例,没关系,但是使用自动缩放不起作用 . 此实例是基于实例存储的,因此我们不使用任何EBS . 也许我想念一些东西?

1 回答

  • 4

    最有可能发生这种情况的原因是您在与最终自动缩放目标不同的实例类型上构建实例存储库映像 . 在m1.small上创建实例图像然后尝试启动m3.large时,我遇到了完全相同的情况 .

    之所以发生这种情况,是因为捆绑和注册以及实例AMI的过程从主机VM(在我的例子中是m1.small)中获取块设备映射,并在映像清单中将其编码为xml . 这很可能引用多个短暂的虚拟卷(epehemeral0,ephemeral1等) . 当使用不具有相同相应卷的实例类型在自动扩展操作期间启动此AMI时,您会收到此错误消息 .

    正如您所提到的,它将作为独立的VM(不是自动缩放的一部分)推出 . AWS确实会出现这种情况,以弥补用户触发的实例AMI启动时的不匹配 .

    解决方案是在创建AMI时显式设置块设备映射以匹配您的预期实例类型 .

    在这里阅读有关块设备映射的更多信息:( http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html

    然后使用ec2-bundle-vol命令和--block-device-mapping标志告诉工具忽略主机VM当前块设备 .

    对我有用的命令如下(在m1.small上创建的图像并在m3.large上自动标记):

    ec2-bundle-vol <lots of other flags snipped> --block-device-mapping ami=sda1,root=/dev/sda1,ephemeral0=sdb,swap=sda3
    

相关问题