我无法启动我的实例,并且在运行 describe-instances 命令时看到 Client.InternalError。如何修复此问题?

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

我正在尝试启动自己的 Amazon Elastic Compute Cloud (Amazon EC2) 实例,但实例没有启动,也没有返回错误消息。或者,它不会启动并返回错误消息“Client.InternalError”或“Server.InternalError”。如何解决此问题?

简短描述

由于以下原因,您可能会看到“Server.InternalError”消息:

  • 您的 Amazon Elastic Block Store (Amazon EBS) 卷未正确附加到实例。
  • 附加到实例的 EBS 卷处于错误状态。

如果已将加密的 EBS 卷连接到实例,您可能会看到“Client.InternalError”消息。

注意:如果您的实例无法启动且未显示错误代码,请运行 describe-instances 命令。然后,指定实例 ID。在以下示例中,使用您尝试启动的实例的 ID 替换 MYINSTANCE

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

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

解决方法

EBS 卷未正确附加到实例

如果 EBS 根卷未作为 /dev/sda1/dev/xvda 附加到实例,并且另一个 EBS 卷具有重复或冲突的设备名称,则无法停止或启动该实例。只有基于 Xen 的实例类型 (c4、m4、t2 等) 受块储存设备名称冲突的影响。基于 Nitro 的实例 (c5、m5、t3 等) 不受块储存设备名称冲突的影响。

1.    运行 describe-instances API 以验证 StateReason 错误消息和错误代码。以下是设备名称冲突时命令输出的示例:

awsec2describe-instances--instance-idi-xxxxxxxxxxxxxxx|egrep-A3-iStateReason
"StateReason": {
    "Code": "Server.InternalError",
    "Message": "Server.InternalError: Internal error on launch"
},

2.    打开 Amazon EC2 控制台,然后选择您无法启动的实例。

3.    在描述选项卡上,确认设备名称列在禁止设备中。禁止设备字段会显示所有已附加卷的设备名称。

4.    确认根设备已正确附加,并且没有列出具有相同名称或名称冲突的设备

5.    如果存在具有相同名称或名称冲突的设备,则分离存在冲突的卷,并对其进行重命名。然后,重新附加具有已更新设备名称的卷

一个附加的 EBS 卷处于错误状态

1.    运行 describe-instances API 以验证 StateReason 错误消息和错误代码。以下是在连接的 EBS 卷处于错误状态时的命令输出示例:

aws ec2 describe-instances --instance-ids i-xxxxxxxxxxxxxx 
          "InstanceId": "i-xxxxxxxxxxxxxxxx",
          "InstanceType": "c4.8xlarge",
          "State": {
            "Name": "stopped"
          },
          "StateTransitionReason": "Server.InternalError",

2.    打开 Amazon EC2 控制台,选择,然后验证卷的状态是否为错误。您的选项因处于错误状态的卷是根卷还是辅助卷而异。

如果处于错误状态的卷是辅助卷,则分离该卷。现在,您可以启动该实例。

如果处于错误状态的卷是根卷,并且您有卷的快照,则执行以下操作:

分离该卷

从快照创建一个新卷

使用原始实例的设备名称,将新卷连接到该实例。启动实例。

注意:如果处于错误状态的卷是根卷,但您目前没有卷的快照,则无法重新启动该实例。您必须重建该实例。

附加的卷已加密且存在不正确的 AWS Identity and Access Management (IAM) 权限或策略

1.    运行 describe-instances API 以验证 StateReason 错误消息和错误代码。以下是实例附加了加密卷且存在权限或策略问题时的命令输出示例:

aws ec2 describe-instances --instance-ids i-xxxxxxxxxxxxxxxxx
"StateReason": {
     "Message": "Client.InternalError: Client error on launch",
     "Code": "Client.InternalError"
   },

2.    请验证以下内容:

注意:要验证卷是否已加密,请打开 Amazon EC2 控制台,然后选择。已加密的卷会在加密列中显示为已加密