我对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).
答案 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日)。
这使您可以一次使用新应用程序更新部分车队,确保始终有可用于接收流量的主机。