强制终止陷入 Pending:Wait 状态的 AutoScaling 实例

Emp*_*nal 11 amazon-web-services autoscaling

我有一个 AutoScaling 组,我在实例启动时摆弄 LifecycleHooks,其中一些由我控制,一些由其他 AWS 服务控制。我一直在添加/删除 LifecycleHooks 并更改 ASG 的大小,但实例陷入了Pending:Wait. 我认为这是因为它正在等待来自 LifecycleHook 的信号,但我无法让它移动。

我尝试了很多事情:

在 EC2 控制台中终止实例

我终止了实例,但 ASG 会等待 LifecycleHook 心跳超时,然后才真正从 ASG 终止实例,这可能需要一个小时。

手动完成 LifecycleHooks

我尝试手动完成 LifecycleHooks,如以下伪代码所示:

describeAutoScalingGroups -> asg {
    instances = getPending(asg.instances)
    describeLifecycleHooks -> lifecycleHooks {
        lifecycleHooks.each {
            instances.each {
                completeLifecycleAction(instance, hook)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这并不能解决问题。我猜测它正在等待的 LifecycleHook 已从 ASG 中删除,因此无法手动完成 LifecycleHook。

接下来是什么?

显然,我应该更加小心地以正确的顺序删除这些资源,所有这些和减少心跳也会有所帮助,但我如何强制终止 ASG 的实例,无论它在等待什么?

yur*_*rez 13

在控制台中终止 EC2 实例后,手动完成 LifecycleHook 对我有用:

aws autoscaling complete-lifecycle-action --lifecycle-hook-name $HOOK --auto-scaling-group-name $ASG --lifecycle-action-result ABANDON --instance-id $ID
Run Code Online (Sandbox Code Playgroud)


Viv*_*mas -2

今天遇到了这个问题,我可以使用 AWS CLI 强制删除。

aws autoscaling delete-auto-scaling-group --auto-scaling-group-name <asg name> --force-delete
Run Code Online (Sandbox Code Playgroud)

但请注意,要使其起作用,您必须--force-delete在第一次使用该参数本身,如果 ASG 已处于挂起删除状态,则此操作将不起作用。

  • 这不完全是同一个问题。我想终止一个特定实例,而不是整个 ASG。不幸的是,终止实例 API 没有强制删除选项。 (2认同)