python - 将 CodeDeploy ValidateService Hook 与 Python 应用程序结合使用

标签 python amazon-web-services amazon-ec2 aws-code-deploy aws-codepipeline

我在 AWS 上托管了一个大型应用程序。 当新版本准备就绪时(当前在生产环境中运行 6 个 ec2 实例),我使用 CodeDeploy 和 Code Pipeline(从 gi​​thub 更新)来更新服务器。

我已将代码部署设置为一对一操作,并在负载均衡器上定义了 300 秒的连接耗尽时间。

不过,我的应用程序很重(它将大型字典 pickle 文件从磁盘加载到内存),启动过程大约需要 60 秒。在这 60 秒内,CodeDeploy 将实例部署过程标记为已完成,从而使其作为健康实例重新加入到负载均衡器 - 这可能会导致用户尝试访问应用程序时出错。

我考虑过使用 ValidateService Hook ,但我不确定在我的情况下如何使用..

关于如何在继续下一个实例之前等待应用程序完全加载和准备就绪,有什么想法吗?

这是我当前的 AppSpec.yml 版本:0.0 操作系统:Linux 文件: - 来源:/部署 目的地:/部署 - 来源:/webserver/src 目的地:/vagrant/webserver/src 权限: - 对象:/部署 图案: ”**” 所有者:根 模式:644 类型: - 目录 - 对象:/webserver/src 所有者:根 模式:644 除外:[/webserver/src/dictionaries] 类型: - 目录 Hook : 申请站: - 位置:/deployment/aws_application_stop.sh 安装前: - 位置:/deployment/aws_before_install.sh 安装后: - 位置:/deployment/aws_after_install.sh 申请开始: - 位置:/deployment/aws_application_start.sh

最佳答案

我会在 ValidateService Hook 中循环,检查您期望的条件,或者只是休眠 60 秒,假设这是正常的初始化时间。

ValidateService Hook 应该做到这一点:在继续/完成部署之前确保服务完全运行。当然,这取决于您的应用程序。但考虑一个拉取专门设计的页面 EG http://localhost/service-ready 的循环。在该 URL 中,测试并确认适合您的服务的所有内容。如果服务尚未验证,则返回 -Pending- 字符串。当一切都 100% 时返回 -OK-

可能会循环 10-20 次,并 sleep 10 秒,并在返回 -OK- 时退出,如果服务从未验证,则抛出错误。

关于python - 将 CodeDeploy ValidateService Hook 与 Python 应用程序结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37967838/

相关文章:

amazon-web-services - AWS IoT Mosquitto 证书错误

python - AWS Boto3 "TypeError: list indices must be integers or slices, not str"

scala - 无法设置 `sbt start`的内存设置

python - 如何删除Python IDLE中的exit(0)弹出窗口?

Python,当动画由传入传感器数据馈送时退出 matplotlib FuncAmination()

ruby-on-rails - 如何在亚马逊 S3 路径中通过 ffmpeg 创建电影截图

amazon-web-services - Amazon EC2 弹性 IP 是否会改变?

amazon-web-services - AWS通过cloudformation启用EBS加密

python - 在 Vagrant Ubuntu 20.04 VM 上安装 pyenv

python - MySQL的向量化查找,并添加到DataFrame中