如何调试自定义健康检查失败的 EC2 实例

How to debug EC2 instances where custom health checks fail

我有一个带有 EC2 的自动缩放组,它实现了 custom health。 有时,健康检查失败,实例被终止和替换。

健康检查本身是作为在实例上运行的 shell 脚本实现的。如果检测到问题,它将通过 AWS API:

通知 Auto Scaling 组
aws autoscaling set-instance-health --instance-id $instance --health-status Unhealthy

问题只是我没有关于什么检查失败的信息,除了通知:

Cause: At 2017-06-13T09:11:47Z an instance was taken out of service in response to a user health-check

调试此类问题的推荐方法是什么。有没有办法让 AWS 只停止实例而不终止它们,以便检查它们的磁盘状态?


(首先我想到了 "enable termination protection",但根据我的理解,这不会有什么不同,在这里。当自定义健康检查失败请求关闭时,自动缩放组仍将终止实例。)

使用 set-instance-health 命令告诉 Auto Scaling 该实例运行状况不佳,需要更换。 Auto Scaling 随后将终止运行状况不佳的实例并启动一个新实例来替换它。

如果您希望对不健康的实例执行取证分析,请使用 aws autoscaling detach-instances command:

将其从 Auto Scaling 组中删除

Removes one or more instances from the specified Auto Scaling group. After the instances are detached, you can manage them independent of the Auto Scaling group.

If you do not specify the option to decrement the desired capacity, Auto Scaling launches instances to replace the ones that are detached.

If there is a Classic Load Balancer attached to the Auto Scaling group, the instances are deregistered from the load balancer. If there are target groups attached to the Auto Scaling group, the instances are deregistered from the target groups.

因此,不要调用 set-instance-health,而是调用 detach-instances(并可选择替换它)。然后您可以调试该实例。如果您希望将其重新投入使用,请使用 aws autoscaling attach-instances.