我想在 AWS ECS 上部署一个 Play Web 应用程序。我创建了一个包含 2 个运行 Web 服务的 EC2 实例的集群。每个实例都运行一个任务。集群由 AWS ELB 进行负载平衡。
将新的 docker 映像推送到存储库后,我创建了任务定义的新修订版,其中包括标记为latest
. 当我更新服务以使用新的任务定义时,所有 EC2 实例都会立即更新它们的任务。即使我有 2 个 EC2 实例,我也会遇到停机时间,因为 AWS 会同时更新所有实例,而不是以滚动部署的方式一个接一个地更新一个实例。
我尝试在每个 EC2 实例上启动多个任务,但这显然是不可能的,因为每个任务都需要 Play 的默认端口 9000,并且我在服务的事件选项卡中收到“端口已在使用”错误消息。
我可以想到两种可能的解决方案:
- 每个任务实例都使用动态端口而不是默认端口。(如何配置负载均衡器以“搜索”动态端口?)
- 创建两个单独的 ECR 集群,将它们都放在一个负载均衡器目标组中,并在第一个集群完成更新后手动更改第二个集群的任务定义。(如何实现自动化 - 或者完全可以自动化?)
这些解决方案之一是可行的方法,还是有任何其他解决方案或此方案的最佳实践?