我无法启动我的实例,并且在运行 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. 请验证以下内容:
- 用于加密该卷的 AWS Key Management Service(AWS KMS)密钥已启用。
- 尝试启动实例的用户具有正确的 IAM 权限。
- 该密钥具有正确的密钥策略。
注意:要验证卷是否已加密,请打开 Amazon EC2 控制台,然后选择卷。已加密的卷会在加密列中显示为已加密。