我已经使用 CodePipeline 和 CodeDeploy 配置了 CD。
- 自动扩展组中的 EC2 实例(3 个实例)
- 已配置运行状况检查的应用程序负载均衡器
- EC2 实例上的 UWSGI 应用程序
CodeDeploy 部署组配置:
- 已分配应用程序负载均衡器
- 目标自动扩展组(带有附加的应用程序负载均衡器)。
- 就地部署。
然后我有 appspec,它有以下钩子:
hooks:
BeforeInstall:
- location: scripts/clean_instance.sh
timeout: 120
runas: root
AfterInstall:
- location: scripts/install_python_dependencies.sh
timeout: 300
runas: project_user
- location: scripts/compile_translations.sh
timeout: 300
runas: project_user
ApplicationStart:
- location: scripts/start_application.sh
timeout: 120
runas: project_user
ApplicationStop:
- location: scripts/stop_application.sh
timeout: 120
runas: project_user
当部署进行时,用户会收到 5xx 错误,感觉就像没有从 ALB 中取出实例一样。文档在这里https://docs.aws.amazon.com/en_us/codedeploy/latest/userguide/integrations-aws-elastic-load-balancing.html指出,
当您将 Elastic Load Balancing 负载均衡器与就地部署结合使用时,部署组中的实例将从负载均衡器中取消注册,使用最新的应用程序修订进行更新,然后在部署成功后作为同一部署组的一部分重新注册到负载均衡器。
我可以在部署控制台中看到实际的 BlockTraffic 和 AllowTraffic 事件。但后来我发现了这个存储库https://github.com/aws-samples/aws-codedeploy-samples/tree/master/load-balancing/elb-v2,其中指出必须执行一些自定义脚本来从负载均衡器中取消注册实例。
我真的应该使用这些脚本吗?如果是,那么为什么文档指出 ALB 不会在部署过程中的实例上路由流量?如果不是,那么为什么用户在部署应用程序时会遇到那些 5xx 错误?