如何调试自定义运行状况检查失败的EC2实例

时间:2017-06-13 09:51:11

标签: amazon-web-services amazon-ec2 health-monitoring

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

运行状况检查本身是作为在实例上运行的shell脚本实现的。如果它检测到问题,它将通过AWS API通知自动扩展组:

aws autoscaling set-instance-health --instance-id $instance --health-status Unhealthy

问题仅在于我没有关于检查失败的信息,除了通知:

  

原因:在2017-06-13T09:11:47Z,一个实例因用户健康检查而停止服务

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

(首先我想到了“启用终止保护”,但根据我的理解,这不会产生任何影响。在自定义运行状况检查失败请求关闭时,Autoscaling组仍将终止实例。)

1 个答案:

答案 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