尝试停止处于“stop_failed”状态的 AWS OpsWorks Stacks 实例时,我收到了“内部错误”消息。如何排查此错误?
简短描述
出于以下两点原因,当您尝试停止处于 stop_failed 状态的实例时,OpsWorks Stacks 可能会返回内部错误消息:
要解决此错误,请先验证堆栈的 IAM 服务角色配置正确。如果问题与权限无关,请运行 AWS 命令行界面 (AWS CLI) stop-instance 命令来停止实例。该命令必须包含 --force 参数和需要停止实例的 OpsWorks 实例 ID。
解决方法
**注意:**如果您在运行 AWS CLI 命令时遇到错误,请确保您运行的是最新版本的 AWS CLI。
验证堆栈的 IAM 服务角色配置正确
按照允许 AWS OpsWorks Stacks 代表您行动中的说明进行操作。
如果问题与权限无关,请运行 AWS CLI stop-instance 命令来停止实例。
通过运行 AWS CLI stop-instance 命令来停止实例
**注意:**您还可以使用 AWS CloudShell 运行以下命令。
1. 运行以下 describe-instances 命令,返回堆栈中处于 stopped_failed 状态的实例的实例 ID:
**重要提示:**将 your-stack-id 替换为您的堆栈 ID。将 your-OpsWorks-Stack-Endpoint-region 替换为堆栈所在的 AWS OpsWorks Stacks 终端节点区域。
$ aws opsworks describe-instances --stack-id your-stack-id --region your-OpsWorks-Stack-Endpoint-region --query 'Instances[?Status==`stop_failed`].{Id:InstanceId}'
2. 确定要停止的实例的实例 ID。您需要这些实例 ID 才能运行 stop-instance 命令。
3. (停止单个实例) 运行以下 stop-instance 命令:
**重要提示:**将 your-opsworks-instance-id 替换为正在停止的实例 ID,并将 your-OpsWorks-Stack-Endpoint-region 替换为堆栈所在的 OpsWorks Stacks 终端节点区域。
$ aws opsworks stop-instance --instance-id your-opsworks-instance-id --force --region your-OpsWorks-Stack-Endpoint-region
–或者–
(停止多个实例) 使用自定义语法逻辑运行 stop-instance 命令,该命令会遍历您要停止的实例。
停止多个实例的示例 stop-instance 命令
**重要提示:**将 your-stack-id 替换为您的堆栈 ID。将 your-OpsWorks-Stack-Endpoint-region 替换为堆栈所在的 OpsWorks Stacks 终端节点区域。
$ for Id in $(aws opsworks describe-instances --stack-id your-stack-id --region your-OpsWorks-Stack-Endpoint-region --query 'Instances[?Status==`stop_failed`].{Id:InstanceId}' --output text) ; do aws opsworks stop-instance --instance-id $Id --force --region your-OpsWorks-Stack-Endpoint-region ; done