如果已在 Amazon EC2 中删除实例,则无法在 OpsWorks Stacks 中停止该实例。为了查找需要停止的实例,OpsWorks StopInstance API 调用需要一个 EC2 实例 ID 和 IAM 服务角色中的相关权限。当 OpsWorks Stacks 未找到 EC2 ID 时,API 调用将失败并返回“内部错误”消息。要使 StopInstance 在底层 EC2 实例已被删除或出现内部错误时工作,您必须使用 --force 子句。
解决方法注意:如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请确保您运行的是最新版本的 AWS CLI。
1.要筛选给定堆栈中处于已停止_失败状态的实例,请使用查询运行 describe-instances 命令:
$ aws opsworks describe-instances --stack-id your-stack-id --region your-region --query 'Instances.{Id:InstanceId}'
2.记下要标记为已停止的实例 ID。
注意:如果您使用的是经典 OpsWorks Stacks 终端节点,则使用 us-east-1 作为 AWS 区域。
使用 --force 子句停止实例如果您有一个要标记为已停止的实例,则运行 stop-instance 命令:
$ aws opsworks stop-instance --instance-id your-opsworks-instance-id --force --region your-region
如果您有多个实例,则可以使用自定义逻辑来迭代这些实例。例如:
$ for Id in $(aws opsworks describe-instances --stack-id your-stack-id --region your-region --query 'Instances.{Id:InstanceId}' --output text) ; do aws opsworks stop-instance --instance-id $Id --force --region your-region ; done