我有一个托管在 AWS 上的重型应用程序。我使用 CodeDeploy 和 Code Pipeline(从 github 更新)在新版本准备就绪时更新服务器(当前在生产环境中运行 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