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

时间:2012-07-16 20:28:17

标签: deployment amazon-web-services amazon-ec2 production-environment 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).

2 个答案:

答案 0 :(得分:21)

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

  

环境是部署到AWS资源上的版本。每   环境只运行一个版本,但您可以运行相同的版本   许多环境中的版本或不同版本同时。   [...]因为   有关环境和资源的更多信息   已创建,请参阅Architectural Overview [强调我的]

此功能对于测试/调试单独的版本非常有用,但具体来说,这也可以实现热交换环境,请参阅Deploying Versions With Zero Downtime了解相应的演练:

  

由于AWS Elastic Beanstalk会在您执行就地更新   更新您的应用程序版本,您将遇到一些停机时间。   但是,可以通过交换CNAME来避免这种停机时间   适合您的环境。本节将向您介绍如何执行   使用AWS管理控制台(命令行)进行CNAME交换   接口或API。 [强调我的]

答案 1 :(得分: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

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