amazon-web-services – 由于userdata脚本,AWS自动扩展功能无法启动实例

我有一个很好的自动缩放,使用启动配置,我定义了一个在新实例启动时执行的userdata脚本.

用户脚本更新基本代码并生成缓存,这需要几秒钟.但是,只要实例“创建”(而不是“就绪”),自动缩放就会将其添加到负载均衡器中.

这是一个问题,因为当执行userdata脚本时,实例没有回复良好的响应(基本上,抛出500个错误).

我想避免这种情况,当然我看到了这个文档:http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/InstallingAdd

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.

看起来我不是这种情况.此外,修改userdata脚本上的挂起钩子很复杂.必须有一个简单的解决方案来解决我的问题.

谢谢您的帮助 !

最佳答案 EC2实例Userdata在完成执行之前不会使用生命周期挂钩来停止新启动的实例投入使用.

在用户数据脚本开始时停止使用Web服务器对我来说听起来有点不可靠,因此我建议您利用AutoScaling提供的功能来解决这个问题.

我有两个建议:

选项1:

一旦阅读完docs,使用生命周期钩子就不复杂了.在用户数据中,您可以轻松使用CLI来控制钩子,检查this.实际上,可以使用任何支持的语言或脚本语言来控制钩子.

选项2:

如果手动处理生命周期钩子对您没有吸引力,那么我建议您删除用户数据脚本并使用AWS CodeDeploy进行解决.您可以让CodeDeploy不进行任何部署(例如,空S3文件夹),但您可以使用部署挂钩脚本来替换您的用户数据脚本. Code Deploy与AutoScaling无缝集成,并自动处理生命周期挂钩.在部署成功之前,AutoScaling不会将新启动的实例投入使用.有关详细信息,请阅读文档herehere.

但是,我建议您使用选项1. Lifecycle hooks旨在解决您遇到的问题.它们强大,强大,令人敬畏和自由.使用它们.

点赞