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

2 分钟阅读
0

我无法启动新的 Amazon Elastic Compute Cloud(Amazon EC2)实例或者启动我现有的实例。

解决方法

有多种原因会导致您可能无法启动 EC2 实例。如果您在尝试启动实例时没有收到错误代码,请按照下面的步骤进行操作:

1.    查看 AWS CloudTrail 中的 StartInstances 事件。

-或-

运行 AWS 命令行界面(AWS CLI)describe-instances 命令,并指定实例 ID,以查看问题的原因。在以下示例中,将 MYINSTANCE 替换为您尝试启动的实例 ID。

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

在命令返回的 JSON 响应中查看 StateReason 消息。在以下示例响应中,返回的 StateReasonClient.InternalError

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

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

2.    查看以下常见错误以解决问题。

InsufficientInstanceCapacity

启动新实例或重新启动已停止的实例时,如果没有足够的按需容量来满足您的请求,则会出现以下错误:

An error occurred (InsufficientInstanceCapacity) when calling the StartInstances operation (reached max retries: 4): Insufficient capacity.)

如果没有足够的按需容量来满足您的请求,则会出现此错误。

有关解决方法信息,请参阅如何解决启动 EC2 实例时出现的 InsufficientInstanceCapacity 错误?

InstanceLimitExceeded

当您在某个 AWS 区域启动的实例数量超过允许的上限时,会出现以下错误:

InstanceLimitExceeded: Your quota allows for 0 more running instance(s).

如果您收到此消息,请向 AWS Support 提交限额增加请求。在请求中,请务必包含您尝试启动的实例类型和您的实例所在的 AWS 区域。

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

UnauthorizedOperation

如果尝试启动实例的用户没有所需的权限,则会出现 UnauthorizedOperation 错误。要解决此错误,请参阅在 EC2 实例启动期间收到“UnauthorizedOperation”错误后,如何解码授权失败消息?

目前不支持请求的配置

以下两个问题会导致此错误:

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.    用于启动实例的亚马逊机器映像(AMI)不支持所选的实例类型。在选择实例类型或系列之前,请查看 AWS Marketplace 中的 AMI 描述。在您使用 AWS Marketplace AMI 并尝试使用 AWS CLI 启动不支持的实例时,通常会出现此问题。从 Amazon EC2 控制台启动实例时,不支持的实例不可用。

Client.InternalError

您可能会收到此错误的常见原因如下:

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

有关解决这些问题的信息,请参阅如何对尝试启动时停止或终止的 Amazon EC2 实例进行故障排除?

磁盘已满错误

如果实例上的空间用完,而审计服务在启动计算机后将其停止,则会发生磁盘已满错误。

**注意:**继续之前,最佳做法是创建快照来备份卷的数据。

**重要事项:**以上解决步骤要求您启动和停止实例。请注意以下几点:

  • 当实例停止时,您会丢失实例存储卷中的数据。有关详细信息,请参阅确定实例的根设备类型
  • 如果您停止了属于 Amazon EC2 自动扩缩组的实例,则可能会终止该实例。使用 Amazon EMR、AWS CloudFormation 和 AWS Elastic Beanstalk 启动的实例可能是 AWS 自动扩缩组的一部分。在这种情况下,实例终止取决于您的自动扩缩组的实例横向缩减保护设置。如果您的实例是自动扩缩组的一部分,请在继续操作之前从自动扩缩组中暂时删除该实例
  • 停止和启动实例会更改实例的公有 IP 地址。当您将外部流量路由到您的实例时,最佳做法是使用弹性 IP 地址而不是公有 IP 地址。

要解决磁盘已满错误,请按照下面的步骤进行操作:

1.    打开 Amazon EC2 控制台

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

3.    停止实例

4.    从停止的实例中分离 EBS 根卷(Linux 为 /dev/xvda)。

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

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

**注意:**在附加辅助卷时,您可以使用不同的设备名称。

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

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

**注意:**以下 $ sudo 命令仅适用于 Linux 环境:

$ 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.    将卷附加到使用设备名称(Linux 为 /dev/xvda)的原始实例,然后启动该实例,确认其成功启动。

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

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

Client.InvalidParameterValue

InvalidParameterValue 表示请求中指定的参数无效、不受支持或无法使用。返回的消息提供了错误值的解释。例如,如果根卷未附加到 /dev/sda1/dev/xvda 中的实例,则根据 AMI,该实例不会启动。发生这种情况时,您会在 AWS CloudTrail 中看到类似于以下内容的条目:

An error occurred (InvalidParameterValue) when calling the StartInstances operation: Invalid value 'i-xxxxxxxxxxxxxxxxx' for instanceId. Instance does not have a volume attached at root (/dev/sda1)

要解决此问题,请使用错误消息作为参考,更改相关参数。例如,要解决前面的示例错误,请将根卷附加到 /dev/sda1 中的实例,然后启动该实例。有关详细信息,请参阅 Amazon EC2 API 的错误代码

相关信息

排查实例启动问题 - Linux

排查实例启动问题 - Windows

Amazon ECS 最佳实践指南

AWS 官方
AWS 官方已更新 1 年前