为什么我无法启动我的 EC2 实例?

上次更新时间:2021 年 10 月 8 日

我无法启动我的 Amazon Elastic Compute Cloud (Amazon EC2) 实例。我应该如何解决此问题?

简短描述

有多种原因会导致您可能无法启动 EC2 实例。如果您在尝试启动实例时没有收到错误代码,请在 AWS Command Line Interface (AWS CLI) 中运行 describe-instances 命令。然后,指定实例 ID 以查看问题的原因。在以下示例中,使用您尝试启动的实例的 ID 替换 MYINSTANCE

注意:如果在运行 AWS CLI 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI

aws ec2 describe-instances --instance-id MYINSTANCE --output json

检查由命令返回的 JSON 响应中的 StateReason 消息。

在以下示例中,返回的 StateReason 是“Client.InternalError”。

"StateReason": {
     "Message": "Client.InternalError: Client error on launch",
     "Code": "Client.InternalError"
   },

解决方法

以下是可能会阻止您启动实例的常见错误:

InsufficientInstanceCapacity

错误消息:“An error occurred (InsufficientInstanceCapacity) when calling the RunInstances operation (reached max retries: 4).We currently do not have sufficient capacity in the Availability Zone you requested.” 如果没有足够的按需容量来完成您的请求,则会发生此错误。

有关解决此错误的更多信息,请参阅如何解决启动 EC2 实例时的 InsufficientInstanceCapacity 错误?

InstanceLimitExceeded

错误消息“Your quota allows for 0 more running instance(s).” 如果您启动的实例数量达到您的区域中允许的最大实例数量,则会发生此错误。

有关解决此错误的更多信息,请参阅如何解决启动 EC2 实例时的 InstanceLimitExceeded 错误?

UnauthorizedOperation

UnauthorizedOperation 错误表示尝试启动实例的用户不具备所需的权限。有关解决此错误的更多信息,请参阅为什么在我尝试启动 EC2 实例时会收到错误消息“You are not authorized to perform this operation”?

目前不支持请求的配置

此错误由以下两个问题引起:

1.    在请求的可用区中不支持指定的实例类型。在 AWS CLI 中运行 aws ec2 describe-instance-type-offerings 命令,以检查实例类型在特定可用区中的可用性。然后,在支持的可用区中启动实例。

例如,使用以下命令检查 c5.2xlarge 实例类型在 us-east-1 的所有可用区中的可用性:

aws ec2 describe-instance-type-offerings --location-type availability-zone --filters Name=instance-type,Values=c5.2xlarge --region us-east-1

2.    用于启动实例的 Amazon Machine Image (AMI) 不支持所选的实例类型。在选择实例类型或系列之前,请参阅 AWS 文档中的 AMI 描述。使用 AWS Marketplace AMI 并通过 AWS CLI 启动它们时,通常会出现此问题。从 Amazon EC2 控制台启动实例时,不受支持的实例不可用。

Client.InternalError

收到此错误的原因可能有几个:

  • Amazon Elastic Block Store (Amazon EBS) 卷未正确附加到实例。
  • 附加到实例的 EBS 卷处于 ERROR 状态。
  • 加密 EBS 卷已附加到实例。但是,您无权访问 AWS Key Management Services (AWS KMS) 进行解密。

有关解决这些问题的更多信息,请参阅我无法启动实例,并且在运行 describe-instances 命令时收到 Client.InternalError。如何修复此问题?

磁盘已满错误

当实例空间不足时,就会出现磁盘已满错误,审计服务会在计算机启动后立即停止计算机。

注意:最佳做法是创建卷的快照来备份数据,然后再继续操作。

重要提示:

这些解决步骤需要停止和启动实例。但应注意以下几点:

  • 实例停止时,实例存储卷中的数据将会丢失。有关更多信息,请参阅确定实例的根设备类型
  • 如果您的实例是 Amazon EC2 Auto Scaling 组的一部分,则停止实例可能会终止实例。使用 Amazon EMR、AWS CloudFormation、AWS Elastic Beanstalk 启动的实例可能是 AWS Auto Scaling 组的一部分。在这种情况下,是否会发生实例终止取决于您的 Auto Scaling 组的实例缩减保护设置。如果您的实例是 Auto Scaling 组的一部分,请在开始执行解决步骤之前,暂时从 Auto Scaling 组中删除它
  • 停止和启动实例会更改实例的公共 IP 地址。在将外部流量路由到您的实例时,最佳做法是使用弹性 IP 地址而不是公有 IP 地址。

要解决磁盘已满错误,请执行以下操作:

1.    打开 Amazon EC2 控制台

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

3.    停止该实例

4.    从已停止的实例分离 EBS 根卷/dev/xvda/dev/sda1)。

5.    在受损实例所在的可用区中启动新的 EC2 实例。这个新实例将成为您的“救援”实例。

6.    将您在第 4 步中分离的根卷挂载到救援实例以作为辅助设备。

注意:挂载辅助卷时可以使用不同的设备名称。

7.    使用 SSH 连接到您的救援实例

8.    为您在第 6 步中挂载到救援实例的新卷创建挂载点目录。在下例中,挂载点目录为 /mnt/rescue

$ sudo mkdir /mnt/rescue

9.    将该卷挂载到您在第 8 步中创建的目录。

$ sudo mount /dev/xvdf /mnt/rescue

注意:可以用不同的设备名称将设备(上例中的 /dev/xvdf)挂载到救援实例。使用 lsblk 命令查看可用磁盘设备及其挂载点,以确定正确的设备名称。

10.    增加根卷的大小

11.    扩展分区

12.    运行 umount 命令以卸载该卷。

$ sudo umount /mnt/rescue

13.    从临时实例分离该卷

14.    将卷挂载到原始实例,然后启动该实例以确认其启动成功。

15.    查看审计服务配置,以确保在计算机空间不足时没有停止(关闭)计算机的选项。Amazon Linux 和 Amazon Linux 2 上的审计服务配置应在 /etc/audit/auditd.conf 中包含以下选项:

max_log_file_action = ROTATE
admin_space_left_action = SUSPEND
disk_full_action = SUSPEND
disk_error_action = SUSPEND

这篇文章对您有帮助吗?


您是否需要账单或技术支持?