amazon web服务—AWS自动伸缩组和非ELB运行状况检查



我们有一个自动伸缩组用于我们的一个云形成堆栈,该堆栈具有基于CPU的警报,用于确定何时扩展实例。

这很棒,但是我们最近将它从一个节点扩展到三个节点,其中一个节点无法通过cfn-init引导。一旦工作负载减少并且组缩小到一个节点,它就会杀死两个好实例,并将部分引导的节点作为唯一剩余的实例。这意味着我们停止处理工作,直到有人登录并重新运行引导过程。

显然这是不理想的。当节点不在ELB后面时,通知自动伸缩组节点不健康的最佳方法是什么?

由于这只是初始引导,我真正想要的是与自动伸缩组通信,该节点失败,并终止它,并在其位置上启动一个新节点。

一个同事刚刚给我看了http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/as-configure-healthcheck.html,看起来很方便。

如果您有自己的健康检查系统,您可以使用健康检查系统的信息来设置Auto Scaling组中实例的健康状态。

UPDATE -我设法在启动时使此工作。

ASG的UserData部分如下:

#!/bin/bash -v
set -x
export AWS_DEFAULT_REGION=us-west-1
cfn-init --region us-west-1 --stack bapi-prod --resource LaunchConfiguration -v
if [[ $? -ne 0 ]]; then
    export INSTANCE=`curl http://169.254.169.254/latest/meta-data/instance-id`
    aws autoscaling set-instance-health 
         --instance-id $INSTANCE 
         --health-status Unhealthy
fi
    cfn-init --region us-west-1 --stack bapi-prod --resource LaunchConfiguration -v
if [[ $? -ne 0 ]]; then
    export INSTANCE=`curl http://169.254.169.254/latest/meta-data/instance-id`
    aws autoscaling set-instance-health 
         --instance-id $INSTANCE 
         --health-status Unhealthy
fi

也可以作为一行代码来完成。例如,我在Terraform中使用以下代码:

runcmd:
 - /tmp/runcmd-puppet.sh || { export INSTANCE=`curl http://169.254.169.254/latest/meta-data/instance-id`; aws autoscaling --region eu-west-1 set-instance-health --instance-id $INSTANCE --health-status Unhealthy; }

最新更新