Amazon web services AWS应用程序负载平衡器-在执行运行状况检查之前等待一段时间

Amazon web services AWS应用程序负载平衡器-在执行运行状况检查之前等待一段时间,amazon-web-services,amazon-elb,aws-load-balancer,aws-auto-scaling,Amazon Web Services,Amazon Elb,Aws Load Balancer,Aws Auto Scaling,我有一个应用程序负载平衡器,配置为将请求转发到目标组内的EC2实例。此外,我还有一个自动缩放组连接到同一个目标组,该目标组根据服务器负载增加实例的数量 Healthchecks在目标组内部配置,工作正常。但是,有时当负载增加并且autoscaling组创建一个新实例时,我看到当ELB调用healthcheck时,在新EC2实例上引发了一个异常 通常,我的实例在启动后大约需要30秒来安装一些库。这就是为什么我在autoscaling组中配置了一个非常慷慨的健康检查宽限期 困扰我的问题是,在实例安装

我有一个应用程序负载平衡器,配置为将请求转发到目标组内的EC2实例。此外,我还有一个自动缩放组连接到同一个目标组,该目标组根据服务器负载增加实例的数量

Healthchecks在目标组内部配置,工作正常。但是,有时当负载增加并且autoscaling组创建一个新实例时,我看到当ELB调用healthcheck时,在新EC2实例上引发了一个异常

通常,我的实例在启动后大约需要30秒来安装一些库。这就是为什么我在autoscaling组中配置了一个非常慷慨的健康检查宽限期

困扰我的问题是,在实例安装所需的库之前,负载平衡器似乎有时会请求healthcheck端点(即使我在目标组中配置了5分钟的间隔)。这会导致抛出异常,我会收到一个异常通知,这非常烦人

自动伸缩内部的健康检查宽限期似乎不会阻止ELB向新实例发送健康检查请求。
你知道如何让ELB healthcheck在自动缩放创建一个新实例后等待一段时间吗?

我最后通过。谷歌,很遗憾没有看到答案。我后来发现了一个资源,它通过生命周期挂钩(在“自动缩放”组的“实例管理”下找到)来实现这一点。使用lifecycle钩子,您基本上可以“暂停”处于服务前状态的实例,直到通过取消暂停。命令行调用或发生超时

因此,在本例中,您需要向启动脚本/用户数据中添加如下内容:

INSTANCE_ID="`wget -q -O - http://instance-data/latest/meta-data/instance-id`" && \
aws autoscaling complete-lifecycle-action --lifecycle-action-result CONTINUE --instance-id $INSTANCE_ID --lifecycle-hook-name test-hook --auto-scaling-group-name test-asg --region eu-west-1 
确保在服务器上的其他安装过程中安装awscli,并更改生命周期名称、组名称和区域以适合

更多信息可在此处找到: