Autoscaling组从未成功启动任何实例

Ste*_*uts 6 amazon-web-services autoscaling

我有一个自动扩展组,它启动队列处理实例.这些实例基于Windows.通常我们只需要一个,但是当我们的积压过大时,我希望能够自动启动更多来处理负载,以便我们的用户获得良好的体验.现在,手动设置所需节点的数量,但我希望将来使用cloudwatch警报自动完成此操作.

当请求新实例时,它从Chef下载其配置并成功启动,我通过查看日志来了解这一点,显示成功的Chef运行.它加入其他实例并开始使用队列中的消息.但是在启动10分钟后,它会因为心跳超时而导致实例"无法启动"而终止.然后它尝试启动一个新实例并继续循环.

当实例启动时,它将停留在"待处理:等待"状态.与我的Web服务器自动扩展组不同,它永远不会离开此状态,直到它稍后终止.这两个实例大致相同,只是这不会运行Web服务器.

我已经尝试将健康检查宽限期和冷却时间调整为1500秒,但实例总是在10分钟内(有时是11)终止.我还尝试将"HealthCheck"和"AddToLoadBalancer"添加到暂停进程列表中,但这似乎没有效果.

我还尝试使用Set-ASInstanceHealth(或aws autoscaling set-instance-health知道CLI版本的人)手动设置实例的运行状况.这也没有效果.

我确实有一个由autoscaling组启动的实例,所以不知何故,它在某一点上能够启动实例.我认为问题在于心跳问题,但我不明白是什么发送它,我找不到任何关于此的文档.

我的猜测是,当实例完成启动并且其上的软件配置正确时,我需要设置一个标志.与ELB关联的实例已经拥有此实例,因为它们具有正常运行的Web服务器,但不在任何端口上侦听的实例需要额外的内容.这是我和其他自动缩放组之间唯一的区别.

Ste*_*uts 6

20179月17日更新 - 您现在可以在管理控制台中查看生命周期挂钩,因此如果您不想使用,则无需使用下面的API调用.

我已经在AWS论坛上的一些亚马逊员工的帮助下成功解决了这个问题.不幸的是,由于我当时并不知道根本原因,我无法用一些可以帮助某人解决问题的细节来填补这个问题.

问题是我为自动缩放组定义了两个生命周期钩子.这些挂钩负责在新实例启动时触发CodeDeploy部署.部署成功后,钩子被标记为成功,实例将移至"InService"状态.如果挂钩从未标记为成功,则自动扩展系统会确定实例无法启动并终止它.

我使用Powershell API列出了我的生命周期钩子:

PS> Get-ASLifecycleHooks -AutoScalingGroupName "Production Background Server";

AutoScalingGroupName  : Production Background Server
DefaultResult         : CONTINUE
GlobalTimeout         : 150000
HeartbeatTimeout      : 1500
LifecycleHookName     : CodeDeploy-managed-automatic-launch-deployment-hook-Production-cdf28f52-84dc-48ca-9c25-xxxxxxxxxxxx
LifecycleTransition   : autoscaling:EC2_INSTANCE_LAUNCHING
NotificationMetadata  : 03ff305d-be5e-48a8-bc85-xxxxxxxxxxxxx
NotificationTargetARN : arn:aws:sqs:eu-west-1:xxxxxxxxxxxxxx:razorbill-eu-west-1-prod-default-autoscaling-lifecycle-hook
RoleARN               : 

AutoScalingGroupName  : Production Background Server
DefaultResult         : CONTINUE
GlobalTimeout         : 150000
HeartbeatTimeout      : 1500
LifecycleHookName     : CodeDeploy-managed-automatic-launch-deployment-hook-Production-f6bda6f3-d4f3-4a73-a6ca-xxxxxxxxxxxxx
LifecycleTransition   : autoscaling:EC2_INSTANCE_LAUNCHING
NotificationMetadata  : 03ff305d-be5e-48a8-bc85-xxxxxxxxxxxx
NotificationTargetARN : arn:aws:sqs:eu-west-1:xxxxxxxxxxxxxx:razorbill-eu-west-1-prod-default-autoscaling-lifecycle-hook
RoleARN               : 
Run Code Online (Sandbox Code Playgroud)

我看到我有两个具有相同通知元数据的钩子.我认为一个必须是多余的,我删除了一个.我试图成功的下一次发射.

我的理论是,因为两个钩子都有相同的通知元数据,所以两个钩子都不可能被标记为成功.因此,两者中的一个总是超时,导致心跳超时.

我不知道如何定义这个额外的钩子,但我认为这是CodeDeploy用户界面中的一个错误.无论如何,我很高兴这个问题现在得到了解决.

  • 太棒了,这个对我有用!此外,对于使用终端和AWS CLI的用户,可以使用以下方法描述LifeCycle Hook:`aws autoscaling describe-lifecycle-hooks --auto-scaling-group-name"AUTOSCALING-GROUP-NAME"`并使用它们删除它们这个:`aws autoscaling delete-lifecycle-hook --lifecycle-hook-name"LIFECYCLE-HOOK-NAME"--auto-scaling-group-name"AUTOSCALING-GROUP-NAME"` (4认同)