Amazon EC2 Auto Scaling 问题排查:EC2 实例启动失败 - Amazon EC2 Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon EC2 Auto Scaling 问题排查:EC2 实例启动失败

此页提供有关未能启动的 EC2 实例的信息、可能的原因,以及可用来解决问题的步骤。

要检索错误消息,请参阅检索来自扩缩活动的错误消息

EC2 实例启动失败时,您可能会收到一条或多条以下错误消息:

当前不支持请求的配置。

原因:启动模板或启动配置中的某些选项可能与实例类型不兼容,或者实例配置可能在您请求的 Amazon 区域或可用区中不受支持。

解决方案:尝试不同的实例配置。要搜索符合您要求的实例类型,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的查找 Amazon EC2 实例类型

有关解决该问题的更多指导,请检查以下内容:

  • 确保您选择了实例类型支持的 AMI。例如,如果实例类型使用基于 ARM 的 Amazon 引力处理器而不是 Intel Xeon 处理器,您需要一个 ARM 兼容的 AMI。有关选择兼容的实例类型的更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的更改实例类型的兼容性

  • 测试实例类型在所请求的区域和可用区中可用。最新一代实例类型可能尚未在给定区域或可用区域中可用。旧一代实例类型可能在给定区域或可用区中不可用。要搜索按位置(区域或可用区)提供的实例类型,请使用 describe-instance-type-offerings 命令。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的查找 Amazon EC2 实例类型

  • 如果您使用专用实例或专用主机,请确保选择了作为专用实例或专用主机受支持的实例类型。

安全组 <该安全组的名称> 不存在。启动 EC2 实例失败。

原因:可能已删除启动模板或启动配置中指定的安全组。

解决方案:

  1. 使用 describe-security-groups 命令获取与您的账户关联的安全组列表。

  2. 从该列表中选择要使用的安全组。要创建安全组,请使用 create-security-group 命令。

  3. 创建新的启动模板或启动配置。

  4. 使用 update-auto-scaling-group 命令通过新的启动模板或启动配置更新您的 Auto Scaling 组。

密钥对 <与您的 EC2 实例相关联的密钥对> 不存在。启动 EC2 实例失败。

原因:可能已删除启动实例时使用的密钥对。

解决方案:

  1. 使用 describe-key-pairs 命令获取可用的密钥对列表。

  2. 从该列表中选择要使用的密钥对。要创建密钥对,请使用 create-key-pair 命令。

  3. 创建新的启动模板或启动配置。

  4. 使用 update-auto-scaling-group 命令通过新的启动模板或启动配置更新您的 Auto Scaling 组。

请求的实例类型(<实例类型>)在请求的可用区(<实例可用区>)中不受支持...

错误消息:您请求的实例类型(<实例类型>)在请求的可用区(<实例可用区>)中不受支持…启动 EC2 实例失败。

原因:您的自动扩缩组中指定的可用区不支持您选择的实例类型。

解决方案:

  1. 使用describe-instance-type-offerings命令或从 Amazon EC2 控制台查看实例类型页面联网窗格上的可用区值,验证哪些可用区支持您选择的实例类型

  2. 使用update-auto-scaling-group命令更新或移除 Auto Scaling 组设置中任何不支持的区域的子网。有关更多信息,请参见 添加和移除可用区

您的竞价请求价格 0.015 低于要求的最低竞价请求履行价格 0.0735...

原因:请求中的 Spot 最高价低于选定的实例类型的 Spot 价格。

解决方案:提交具有较高 Spot 最高价(可能是按需价格)的新请求。之前,您支付的 Spot 价格是基于出价的。今天,您支付当前 Spot 价格。通过设置更高的最高价,Amazon EC2 Spot 服务可以更好地启动和保持您所需的容量。

设备名称 <device name> 无效/设备名称上传无效。启动 EC2 实例失败。

原因 1:启动模板或启动配置中的块储存设备映射所包含的块储存设备名称可能无法使用或目前不受支持。

解决方案:

  1. 验证哪些设备名称可用于您的特定实例配置。有关设备命名的信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的 Linux 实例上的设备命名

  2. 手动创建不是 Auto Scaling 组一部分的 Amazon EC2 实例并调查问题。如果块储存设备命名配置与 Amazon Machine Image (AMI) 中的名称冲突,则实例将在启动期间失败。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的块储存设备映射

  3. 确认您的实例已成功启动后,使用 describe-volumes 命令查看如何向实例公开卷。

  4. 使用卷描述中列出的设备名称创建新的启动模板或启动配置。

  5. 使用 update-auto-scaling-group 命令通过新的启动模板或启动配置更新您的 Auto Scaling 组。

用于参数 virtualName 的值(<与实例存储设备相关联的名称>)无效... 启动 EC2 实例失败。

原因:与块储存设备相关联的虚拟名称的指定格式不正确。

解决方案:

  1. 通过在 virtualName 参数中指定设备名称创建新的启动模板或启动配置。有关设备名称格式的信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的 Linux 实例上的设备命名

  2. 使用 update-auto-scaling-group 命令通过新的启动模板或启动配置更新您的 Auto Scaling 组。

实例存储 AMI 不支持 EBS 块储存设备映射。

原因:启动模板或启动配置中指定的块储存设备映射在您的实例上不受支持。

解决方案:

  1. 使用实例类型支持的块储存设备映射来创建新的启动模板或启动配置。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的块储存设备映射

  2. 使用 update-auto-scaling-group 命令通过新的启动模板或启动配置更新您的 Auto Scaling 组。

置放群组可能无法与类型为“<instance type>”的实例一起使用。启动 EC2 实例失败。

原因:您的集群置放群组包含无效实例类型。

解决方案:

  1. 有关置放群组支持的有效实例类型的信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的置放群组

  2. 按照置放群组中的详细说明创建新的置放群组。

  3. 或者,也可以使用受支持的实例类型创建新的启动模板或启动配置。

  4. 使用 update-auto-scaling-group 命令通过新的置放群组、启动模板或启动配置更新您的 Auto Scaling 组。

客户。 InternalError: 启动时出现客户端错误。

问题:Amazon EC2 Auto Scaling 尝试启动具有加密 EBS 卷的实例,但服务相关角色没有权限访问用于对其进行加密的 Amazon KMS 客户托管密钥。有关更多信息,请参见 使用加密卷所需的 Amazon KMS 密钥策略

原因 1:您需要密钥策略,该策略向适当的服务相关角色授予使用客户托管密钥的权限。

解决方案 1:允许服务相关角色使用客户管理密钥,如下所示:

  1. 确定将哪个服务相关角色用于此 Auto Scaling 组。

  2. 更新客户托管密钥上的密钥策略并允许服务相关角色使用客户托管密钥。

  3. 更新 Auto Scaling 组来使用服务相关角色。

有关允许服务相关角色使用客户托管密钥的密钥策略示例,请参阅 示例 1:允许访问客户托管密钥的关键策略部分

原因 2:如果客户托管密钥和 Auto Scaling 组在不同的 Amazon 账户中,您需要配置对客户托管密钥的跨账户访问权限,以便向适当的服务相关角色授予使用客户托管密钥的权限。

解决方案 2:允许外部账户中的服务相关角色使用本地账户中的客户托管密钥,如下所示:

  1. 更新客户托管密钥上的密钥策略,以允许 Auto Scaling 组账户访问客户托管密钥。

  2. 在 Auto Scaling 组账户中定义可以创建授权的 IAM 用户或角色。

  3. 确定将哪个服务相关角色用于此 Auto Scaling 组。

  4. 使用适当的服务相关角色作为被授权者委托人,创建对客户托管密钥的授权。

  5. 更新 Auto Scaling 组来使用服务相关角色。

有关更多信息,请参见 示例 2:允许跨账户访问客户托管密钥的关键策略部分

解决方案 3:将同一 Amazon 账户中的客户托管密钥作为 Auto Scaling 组。

  1. 使用属于与 Auto Scaling 组相同的账户中的另一个客户托管密钥,复制并重新加密快照。

  2. 允许服务相关角色使用新的客户托管密钥。请参阅解决方案 1 的步骤。

我们目前在您请求的可用区中没有足够的 <实例类型> 容量。启动 EC2 实例失败。

错误消息:您请求的可用区(<请求的可用区>)中当前没有足够的 <实例类型> 容量。我们的系统将调配额外的容量。您当前可以通过不在请求中指定可用区,或者选择 <当前支持该实例类型的可用区列表> 来获取 <实例类型> 容量。启动 EC2 实例失败。

原因:目前,不支持请求的实例类型和可用区组合。

解决方案:要解决此问题,请尝试以下方法:

  • 请等待几分钟,让 Amazon EC2 Auto Scaling 在其他已启用的可用区中找到该实例类型的容量。

  • 将自动扩缩组扩展到其他可用区。有关更多信息,请参见 添加和移除可用区

  • 请遵循使用不同实例类型集的最佳实践,以便您不依赖于某一特定实例类型。有关更多信息,请参见 Auto Scaling 组具有多个实例类型和购买选项

所请求的预留没有足够的兼容容量和可用容量来满足此请求。启动 EC2 实例失败。

原因 1:您已达到可通过 targeted 按需容量预留启动的实例数量限制。

解决方案 1:增加可通过 targeted 按需容量预留启动的实例数量,或者使用容量预留组,以便预留容量以外的任何容量都将作为常规按需容量启动。有关更多信息,请参见 使用按需容量预留来预留特定可用区的容量

原因 2:您已达到可用某一容量块启动的实例数限制。

使用容量块,您将受到最初购买的容量值的限制。如果您遇到的启动次数超过预期并且可用容量耗尽,则会导致启动失败。终止实例在完全终止之前要经过漫长的清理过程。在此期间,无法重新使用它们。这也可能导致启动失败。有关更多信息,请参见 在 ML 的容量块中启动实例

解决方案 2:要解决此问题,请尝试以下方法:

  • 保持请求不变。如果 Capacity Block 实例即将终止,则必须等待几分钟,该实例才能完成终止,容量才能恢复可用。Amazon EC2 Auto Scaling 会继续自动发起启动请求,直到容量可用为止。

  • 请务必购买足够的容量来容纳峰值工作负载,这样就不会经常遇到此错误。

您的容量块预留 <reservation id> 尚未激活。启动 EC2 实例失败。

原因:指定的容量块尚未激活。

解决方案:按照推荐的容量块方法进行操作,并使用计划扩缩。这样做可以帮助您确保仅在预留处于活动状态时增加自动扩缩组的所需容量,并在预留结束之前减少所需容量。

没有与您的请求匹配的竞价容量。启动 EC2 实例失败。

原因:目前没有足够的备用容量来满足您的竞价型实例请求。

解决方案:要解决此问题,请尝试以下方法:

  • 等待几分钟;容量可能经常转移。Amazon EC2 Auto Scaling 会继续自动发起启动请求,直到容量可用为止。

  • 将自动扩缩组扩展到其他可用区。有关更多信息,请参见 添加和移除可用区

  • 请遵循使用不同实例类型集的最佳实践,以便您不依赖于某一特定实例类型。有关更多信息,请参见 Auto Scaling 组具有多个实例类型和购买选项

已运行 <实例数量> 个实例。启动 EC2 实例失败。

原因:您已达到可在某一区域中启动的实例数限制。在创建 Amazon 账户时,我们根据区域设置可运行的实例数的默认限制。

解决方案:要解决此问题,请尝试以下方法:

  • 如果您当前的限制不足以满足需求,您可以根据区域请求提高配额。有关更多信息,请参见适用于 Linux 实例的 Amazon EC2 用户指南中的 Amazon EC2 服务配额

  • 提交减少了实例数(可在后期阶段增加)的新请求。