如何在AWS Elastic Beanstalk部署新版本的应用程序期间防止停机?

Pet*_*ter 28 deployment amazon-ec2 production-environment amazon-web-services amazon-elastic-beanstalk

我对Elastic Beanstalk的理解是,当您部署新版本的应用程序时,它会一次一个地部署到Amazon EC2实例(如果您有多个).但是,即使至少有两个实例,当我.war在部署它时上传新的应用程序时,我的应用程序会导致短暂的停机时间,就好像它们同时更新它们一样.有没有办法可以确保没有停机时间,并且一个实例在下次启动之前完全更新并接受请求:这是事件的外观.请注意,这是应用程序零负载,因此只会因生产流量而变得更糟.

INFO
Environment update completed successfully.

INFO
New application version was deployed to running EC2 instances.

ERROR
The application did not respond at the health check URL.

INFO
Waiting for 8 seconds while EC2 instances download the updated application version.

INFO
Deploying version SomethingMore to 2 instance(s).
Run Code Online (Sandbox Code Playgroud)

Ste*_*pel 21

要在Elastic Beanstalk中实现此目标,您需要扩展部署过程以促进多个环境(请参阅AWS Elastic Beanstalk组件):

环境是部署到AWS资源上的版本.每个环境只运行一个版本,但您可以在许多环境中同时运行相同版本或不同版本.[...]有关环境和创建的资源的详细信息,请参阅" 体系结构概述".[强调我的]

此功能对于测试/调试单独的版本非常有用,但具体而言,这也可以实现热交换环境,请参阅为相应的演练部署具有零停机时间的版本:

由于AWS Elastic Beanstalk在您更新应用程序版本时执行就地更新,因此您将遇到一些停机时间.但是,可以通过交换环境的CNAME来避免此停机时间.本节将指导您如何使用AWS管理控制台,命令行界面或API执行CNAME交换.[强调我的]

  • 我在我的生产应用程序上尝试了这一点,并观察到即使在交换CNAME并等待DNS TTL到期之后,相当大一部分流量仍然会进入旧的beanstalk环境.我怀疑这是因为客户端持有的DNS缓存比他们应该的更长.如果不能依赖客户端来遵守TTL,那么这种CNAME交换技术似乎不是使用Beanstalk进行ZDD部署的可靠方法. (6认同)

zon*_*eil 8

我知道这是一个老问题,但对于谷歌搜索人员(像我一样),Elastic Beanstalk今天发布了滚动应用程序版本部署(2014年2月11日).

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.rolling-version-deploy.html?sc_ichannel=em&sc_icountry=global&sc_icampaigntype=launch&sc_icampaign=em_125873140&sc_idetail=em_14124901705&ref_=pe_411040_125873140_8

这允许您一次使用新应用程序更新部分车队,确保始终有可用于接收流量的主机.