我在AWS上托管了一个重型应用程序。我使用Codedeploy&代码管道(从GitHub更新)在准备好新版本时更新服务器(当前在生产环境上运行6个EC2实例)。
我已经设置了codedeploy以一对一操作,还定义了在负载平衡器上耗尽300秒的连接。
仍然,我的应用程序很重(它从磁盘上加载了大型词典泡菜文件到内存),发射的过程大约需要约60秒。在这60秒内,编码eploy标记了已完成的实例的部署过程,从而使其作为健康实例加入到负载平衡器中 - 这可能会导致试图到达应用程序的用户错误。
。我考虑使用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
我会在ValidateService
钩中循环,检查您期望的条件,>或仅睡60秒,假设这是正常的初始化时间。p> ValidateService
钩子应该做到这一点:确保服务在继续/最终确定部署之前已完全运行。当然,这取决于您的应用。但是考虑一个循环,该循环拉动了一个专门设计的页面,例如http://localhost/service-ready
。在该URL中,测试并确认适合您服务的所有内容。如果尚未验证该服务,请返回-Pending-
字符串。一切都100%
-OK-
也许在10秒睡眠中循环10-20次,然后在返回-OK-
时退出,然后如果服务永不验证,则丢弃错误。