排查 Amazon EC2 实例启动问题 - Amazon Elastic Compute Cloud

排查 Amazon EC2 实例启动问题

以下问题排查技巧有助于解决启动 Amazon EC2 实例时出现的问题。

设备名称无效

描述

在尝试启动新实例时,您将收到 Invalid device name device_name 错误。

原因

如果您在尝试启动实例时遇到此错误,则请求中为一个或多个卷指定的设备名称无效。可能的原因包括:

  • 所选 AMI 目前可能在使用该设备名称。

  • 该设备名称可能是为根卷保留的。

  • 该设备名称可能用于请求中的另一个卷。

  • 该设备名称可能对操作系统无效。

解决方案

要解决问题,请执行以下操作:

  • 确保所选 AMI 未使用该设备名称。运行以下命令,查看 AMI 使用的设备名称。

    aws ec2 describe-images --image-id ami_id --query 'Images[*].BlockDeviceMappings[].DeviceName'
  • 确保没有使用为根卷保留的设备名称。有关更多信息,请参阅 可用设备名称

  • 确保在请求中指定的每个卷都有唯一的设备名称。

  • 确保指定的设备名称采用正确格式。有关更多信息,请参阅 可用设备名称

超出实例限制

描述

在尝试启动新实例或重新启动已停止的实例时,您将收到 InstanceLimitExceeded 错误。

原因

在尝试启动新实例或重新启动已停止的实例时,如果您已达到可在区域中启动的实例的数目限制,则将收到 InstanceLimitExceeded 错误。在创建 AWS 账户时,我们根据区域设置可运行的实例数的默认限制。

解决方案

您可以根据区域请求提高实例限制。有关更多信息,请参阅 Amazon EC2 Service Quotas

实例容量不足

描述

在尝试启动新实例或重新启动已停止的实例时,您将收到 InsufficientInstanceCapacity 错误。

原因

如果您在尝试启动实例或重新启动已停止的实例时收到此错误,则表示 AWS 当前没有足够的可用按需容量来服务您的请求。

解决方案

要解决该问题,请尝试以下操作:

  • 等待几分钟,然后再次提交您的请求;容量可能经常转移。

  • 提交减少了实例数的新请求。例如,如果您要提交 1 个启动包含 15 个实例的请求,请改为尝试提交 3 个包含 5 个实例的请求或 15 个包含 1 个实例的请求。

  • 如果您要启动实例,请提交新请求,无需指定可用区。

  • 如果您要启动实例,请使用其他实例类型 (可在后期调整大小) 提交新请求。有关更多信息,请参阅 Amazon EC2 实例类型更改

  • 如果您将实例启动到集群置放群组中,则会获得容量不足错误。

当前不支持请求的配置。请查看文档以了解支持的配置。

描述

当您尝试启动新实例时会出现 Unsupported 错误,因为不支持实例配置。

原因

错误消息提供了更多详细信息。例如,指定的区域或可用区可能不支持实例类型或实例购买选项。

解决方案

尝试其他实例配置。要搜索符合您要求的实例类型,请参阅 查找 Amazon EC2 实例类型

实例立即终止

描述

您的实例会从 pending 状态变为 terminated 状态。

原因

下面是实例可能立即终止的一些原因:

  • 您已超出 EBS 卷限制。有关更多信息,请参阅 Amazon EC2 实例的 Amazon EBS 卷限制

  • EBS 快照损坏。

  • 根 EBS 卷已加密,但您无权访问用于解密的 KMS 密钥。

  • 在块储存设备映射中为 AMI 指定的快照已加密,但您无权访问用于解密的 KMS 密钥,或者您无权访问 KMS 密钥 来加密还原的卷。

  • 您用来启动实例的由实例存储支持的 AMI 缺少必需部分(一个 image.part.xx 文件)

有关更多信息,请通过以下某种方法了解终止原因。

使用 Amazon EC2 控制台了解终止原因
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择 Instances,然后选择实例。

  3. 在第一个选项卡上,在状态转换原因旁边查看原因。

使用 AWS Command Line Interface 控制台了解终止原因
  1. 使用 describe-instances 命令并指定实例 ID。

    aws ec2 describe-instances --instance-id instance_id
  2. 检查命令返回的 JSON 响应,并记下 StateReason 响应元素中的值。

    下面的代码块显示了 StateReason 响应元素的示例。

    "StateReason": { "Message": "Client.VolumeLimitExceeded: Volume limit exceeded", "Code": "Server.InternalError" },
使用 AWS CloudTrail 了解终止原因

有关更多信息,请参阅 AWS CloudTrail 用户指南中的使用 CloudTrail 事件历史记录查看事件

解决方案

根据找到的终止原因,执行以下某项操作:

  • Client.VolumeLimitExceeded: Volume limit exceeded - 删除未使用的卷。您可以提交请求,要求提高卷限制。

  • Client.InternalError: Client error on launch – 确保您具有访问用于解密和加密卷的 AWS KMS keys 所需的权限。有关更多信息,请参阅 AWS Key Management Service 开发人员指南中的在 AWS KMS 中使用密钥策略

权限不足

描述

在尝试启动新实例时出现 "errorMessage": "You are not authorized to perform this operation." 错误,并且启动失败。

原因

如果您在尝试启动实例时出现此错误,则说明您没有启动该实例所需的 IAM 权限。

可能缺少以下权限:

  • ec2:RunInstances

  • iam:PassRole

也可能缺少其他权限。有关启动实例所需的权限列表,请参阅 示例:使用 EC2 启动实例向导 和 启动实例 (RunInstances) 下的示例 IAM policy。

解决方案

要解决问题,请执行以下操作:

  • 如果您以 IAM 用户身份发出请求,请验证您拥有以下权限:

    • 对通配符资源 ("*") 执行 ec2:RunInstances 操作的许可

    • iam:PassRole 对匹配角色 ARN (例如 arn:aws:iam::999999999999:role/ExampleRoleName) 的资源执行操作的权限。

  • 如果您没有上述权限,请编辑与 IAM 角色或用户关联的 IAM policy 以添加缺少的必需权限。

如果问题并未解决且仍然出现启动失败错误,您可以解码错误中包含的授权失败消息。解码后的消息包含 IAM policy 中缺少的权限。有关更多消息,请参阅在 EC2 实例启动期间收到“UnauthorizedOperation”错误消息后,如何解码授权失败消息?

Windows 启动后,CPU 使用率短时增高(仅限 Windows 实例)

注意

此故障排除技巧仅适用于 Windows 实例。

如果将 Windows Update 设置为 Check for updates but let me choose whether to download and install them (检查更新,但允许我选择是否下载并安装它们)(默认实例设置),则此检查可能会在实例上消耗 50 - 99% 的 CPU。如果此 CPU 消耗会导致您的应用程序出现问题,您可手动在 Control Panel 中更改 Windows Update 设置或者使用 Amazon EC2 用户数据字段中的以下脚本:

reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update" /v AUOptions /t REG_DWORD /d 3 /f net stop wuauserv net start wuauserv

运行此脚本时,为 /d 指定一个值。默认值为 3。可能的值包括:

  1. 从未检查更新

  2. 检查更新,但允许我选择是否下载并安装它们

  3. 下载更新,但允许我选择是否安装它们

  4. 自动安装更新

在为您的实例修改用户数据后,可运行它。有关更多信息,请参阅启动时在 Windows 实例上运行命令