AWS autoscaling starts not ready instances because of userdata script


I have an autoscaling that works great, with a launchconfiguration where i defined a userdata script that is executed on a new instance launch.

The userscript updates basecode and generate cache, this takes some seconds. But as soon as the instance is “created” (and not “ready”), the autoscaling adds it to the load balancer.

It’s a problem because while the userdata script is executed, the instance does not answer with a good response (basically, 500 errors are throw).

I would like to avoid that, of course I saw this documentation :

As with a standalone EC2 instance, you have the option of configuring instances launched into an Auto Scaling group using user data. For example, you can specify a configuration script using the User data field in the AWS Management Console, or the –userdata parameter in the AWS CLI.

If you have software that can’t be installed using a configuration script, or if you need to modify software manually before Auto Scaling adds the instance to the group, add a lifecycle hook to your Auto Scaling group that notifies you when the Auto Scaling group launches an instance. This hook keeps the instance in the Pending:Wait state while you install and configure the additional software.

Looks like i’m not in this case. Also, modify the pending hook on the userdata script is complicated. There must be a simple solution to fix my problem.

Thank you for your help !


@Brooks said the easiest way to “wait” before the ELB serve the instance is to deal with ELB health status.

I solved my problem by shutting down the http server at the start of the userdata script. So the ELB can’t have a green health status, and it does not send clients to the instance. I re-start the http server at the end of the script, the health is good so the ELB serve it.

Leave a Reply