我可以在 AWS Auto Scaling 组终止之前拍摄不健康实例的快照吗?

Can I take snapshot of unhealthy instance before AWS Autoscale group terminates it?

我有一个由 ASG 控制的 ec2 实例的 3 节点集群。当 ec2 上的任何应用程序服务器 运行 出现异常时,elb 健康检查失败,因此 asg 终止它并重新创建一个新实例。因此,在某种程度上,我的设置是自我修复的,但我想在发生这种情况时对实例进行更多调试。我想要一个行为不端实例的快照或 ami,以便我可以深入研究这个问题。

有什么建议可以实现吗?

提前致谢。

DetachInstances

最好的方法是调用 detach-instances,这会从 Auto Scaling 组中删除一个实例并选择性地替换它。

但是,在健康检查失败后触发此命令并不容易。

Auto Scaling 生命周期挂钩

您可以配置一个 Amazon EC2 Auto Scaling Lifecycle Hook,它将在实例终止之前被调用。然后,您的生命周期挂钩可以对该卷进行快照。但是,我不确定在健康检查失败时(与发生缩减事件时相反)是否会调用生命周期终止挂钩,因此这需要进行一些测试。

CloudWatch 触发 Lambda

另一种选择是:

  • 不要配置 Auto Scaling 以使用负载均衡器运行状况检查
  • 如果某个实例未通过 ELB 健康检查,则 ELB 不会向该实例发送流量,因此您的应用仍然可以
  • 当附加到 ELB 的不健康实例的数量大于零时,使用 CloudWatch 警报触发 Lambda 函数
  • Lambda 函数可以检查状态以确定哪个实例不健康,然后调用 detach-instances 将其从 Auto Scaling 组中删除
  • 因此,您可以访问 Auto Scaling 组之外的不健康实例,甚至不必使用 EBS 快照