我有一个EC2的自动缩放组,它实现了custom health。 健康检查有时会失败,实例会被终止并替换。
运行状况检查本身是作为在实例上运行的shell脚本实现的。如果它检测到问题,它将通过AWS API通知自动扩展组:
aws autoscaling set-instance-health --instance-id $instance --health-status Unhealthy
问题仅在于我没有关于检查失败的信息,除了通知:
原因:在2017-06-13T09:11:47Z,一个实例因用户健康检查而停止服务
调试这些类型问题的推荐方法是什么。有没有办法让AWS只停止实例而不终止它们,这样可以检查它们的磁盘状态?
(首先我想到了“启用终止保护”,但根据我的理解,这不会产生任何影响。在自定义运行状况检查失败请求关闭时,Autoscaling组仍将终止实例。)
答案 0 :(得分:2)
使用set-instance-health
命令告诉Auto Scaling该实例运行状况不佳,需要更换。然后,Auto Scaling将终止不健康的实例并启动一个新实例来替换它。
如果您希望对不健康的实例执行取证分析,请使用aws autoscaling detach-instances
command将其从Auto Scaling组中删除:
从指定的Auto Scaling组中删除一个或多个实例。分离实例后,您可以独立于Auto Scaling组管理它们。
如果您未指定减少所需容量的选项,Auto Scaling会将实例启动到替换分离的实例。
如果Auto Scaling组附加了Classic Load Balancer,则会从负载均衡器中取消注册实例。如果Auto Scaling组附加了目标组,则会从目标组取消注册实例。
因此,请拨打set-instance-health
(并可选择替换它),而不是调用detach-instances
。然后,您可以调试实例。如果您希望将其重新投入使用,请使用aws autoscaling attach-instances
。