【问题标题】:Using CodeDeploy ValidateService Hook with Python Application将 CodeDeploy ValidateService Hook 与 Python 应用程序一起使用
【发布时间】:2016-10-24 09:13:02
【问题描述】:

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

我已将 codedeploy 设置为逐一操作,并在负载平衡器上定义了 300 秒的连接消耗。

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

我考虑过使用ValidateService 钩子,但我不知道在我的情况下如何..

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

这是我当前的 AppSpec.yml version: 0.0 os: linux files: - source: /deployment destination: /deployment - source: /webserver/src destination: /vagrant/webserver/src permissions: - object: /deployment pattern: "**" owner: root mode: 644 type: - directory - object: /webserver/src owner: root mode: 644 except: [/webserver/src/dictionaries] type: - directory hooks: ApplicationStop: - location: /deployment/aws_application_stop.sh BeforeInstall: - location: /deployment/aws_before_install.sh AfterInstall: - location: /deployment/aws_after_install.sh ApplicationStart: - location: /deployment/aws_application_start.sh

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-21
      • 1970-01-01
      • 2016-11-29
      • 2012-12-29
      • 1970-01-01
      • 2018-10-21
      • 2013-01-13
      • 2015-01-03
      相关资源
      最近更新 更多