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

场景:

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

我想添加一个简单的健康检查,即Web服务器仍然响应,所以如果docker容器closures,自动伸缩组可以replace实例。

从我所看到的,只有ELB支持自定义健康检查。 因为我不需要ELB,所以我想知道在cron作业中运行EC2实例内的健康检查是否合理。 如果Web服务器没有响应(本地),则可以像这样设置健康状态:

export INSTANCE=$(curl http://169.254.169.254/latest/meta-data/instance-id) export AWS_DEFAULT_REGION=$(curl http://169.254.169.254/latest/dynamic/instance-identity/document|grep region|awk -F\" '{print $4}') aws autoscaling set-instance-health --instance-id $INSTANCE --health-status Unhealthy 

我认为,它应该有效,但是看起来有些复杂。 有没有更好的方法来实现自定义健康检查(不使用ELB)?

在2017年,没有AWS的直接支持,只有API来设置EC2实例的健康状况。 因此,问题中描述的技术是推荐的方法:

  • 实施一个定制的健康检查(可以是一个shell脚本或任何您select的)并定期运行(通过cron或任何你select的)
  • 使用autoscaling set-instance-health API将结果传递给自动缩放组

自定义运行状况检查的AWS文档 :

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

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

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