如何在不使用ELB的情况下为EC2实例实现自定义运行状况检查?

时间:2017-05-15 09:09:58

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

情景:

  • 我在自动缩放组后面运行EC2实例,但我没有使用ELB。
  • 在EC2实例中,带有Web服务器的docker容器正在运行。

我想添加一个简单的运行状况检查,Web服务器仍然会响应,因此如果docker容器出现故障,自动扩展组可以替换该实例。

据我所知,只有ELB支持自定义健康检查。由于我不需要ELB,我想知道使用cron作业在EC2实例中运行运行状况检查是否有意义。如果Web服务器没有响应(本地),它可以设置健康状态,如下所示:

DataTable table = your datatable;
table.Columns[0].ColumnName = "Foo";

我认为它应该可行,但看起来有点复杂。 是否有更好的方法来实施自定义运行状况检查(不使用ELB)?

1 个答案:

答案 0 :(得分:7)

2017年,AWS没有直接支持,只有用于设置EC2实例运行状况的API。因此,问题中描述的技术是推荐的方式:

  • 实施自定义运行状况检查(可以是shell脚本或您选择的任何内容)并定期运行(通过cron或您选择的任何内容)
  • 使用autoscaling set-instance-health API将结果传达给自动缩放组

AWS documentation on custom health checks

  

如果您有自定义运行状况检查,则可以将运行状况检查中的信息发送到Auto Scaling,以便Auto Scaling可以使用此信息。例如,如果确定实例未按预期运行,则可以将实例的运行状况设置为“不健康”。下次Auto Scaling对实例执行运行状况检查时,它将确定该实例运行状况不佳,然后启动替换实例。

     

使用以下set-instance-health命令将指定实例的运行状况设置为Unhealthy:

     

aws autoscaling set-instance-health --instance-id i-123abc45d –-health-status Unhealthy