我认为在设计我的aws基础设施时我做错了什么。 实际上我有一个自动缩放组和一个ec2实例。
在这个实例上有6个laravel项目与aws CodeDeploy中的6个应用程序相关联,因此当我想更新版本时,我只需使用codedeploy进行更新。
当自动调节组向组添加实例时会出现问题,我的所有codedeploy应用程序都部署到新创建的实例,并且失败并显示以下消息:
一个或多个生命周期事件未运行且部署失败。可能的原因包括: (1)多个部署试图在实例上同时运行;
那么......让这个工作的最佳方法是什么?
答案 0 :(得分:2)
AWS建议将单个部署组与ASG关联,并将部署合并到单个部署中,以实现适当的扩展。每个部署组都将生命周期挂钩与ASG相关联,ASG将在扩展事件发生时通知部署组。并行部署(在您的情况下为6)将倾向于代码部署超时(5-60分钟),并且在ec2上运行的codedeploy代理可以一次执行一个命令。
如果您的每个应用程序花费的时间较少(<60分钟),您可能希望将它们合并到单个应用程序并通过codedeploy挂钩进行部署。否则建议对app使用不同的asg。
参考:https://aws.amazon.com/blogs/devops/under-the-hood-aws-codedeploy-and-auto-scaling-integration/
列出生命周期钩子:
aws autoscaling describe-lifecycle-hooks --auto-scaling-group-name <asg_name> --region <region>
如果新的ec2的启动进入终止和启动的无限循环,你可以删除生命周期钩子
aws autoscaling delete-lifecycle-hook --lifecycle-hook-name <lifecycleName> --auto-scaling-group-name <asg_name> --region <region>