首页 > 解决方案 > 部署新代码后如何更新 AWS Auto-scaling Group 中的所有实例?

问题描述

我正在尝试在AWS中构建一个更具动态/可扩展性的系统。我在AutoScaling 组中启动了2 个实例,其中最小实例数2最大实例数为5,前面有一个负载均衡器。我在前两个实例上启用了“终止保护” ,因为它们将成为我用于通过 Capistrano部署Rails 应用程序的实例。

问题是我不确定让我的自动缩放组中的所有实例保持最新状态的最佳方法是什么,以便它们运行相同版本的应用程序。

我已经搜索了许多技术,以下是我认为适用但仍然不知道哪个是最好的。

1- AWS CodeDeploy:看起来很酷,使用蓝/绿部署看起来可以在零停机时间的情况下完成这项工作。我不知道这是否有经验法则,但在我看来,部署时间有点长,我不确定当我需要发布修补程序时它是否适用。

2- 通过脚本:我也不确定如何使用 AWS 来实现这一点,但想法是当一个新代码上传到我的 2 个“主(?)”实例时,

  1. 我将使用新的 AMI创建一个新的启动配置
  2. 更新自动缩放组以使用新的启动配置
  3. 缩减我的自动缩放组以终止运行旧配置的实例
  4. 希望自动扩展策略将使用新的启动配置创建新实例

这种方法的问题在于它需要一些我不想过多依赖的手动操作。

3- 使用用户数据:使用用户数据运行新实例以提取新版本的代码。我认为这不是一个好方法,因为可能会有其他实例已经在运行旧代码。

所以这些是我到目前为止看到的解决方案,哪一个是最好的解决方案?

干杯!

标签: ruby-on-railsamazon-web-servicesdeploymentcapistranoautoscaling

解决方案


我最终使用了一个扩展 gem(我的应用程序是用 ruby​​ on rails 编写的)进行部署。我已经在使用Capistrano部署,然后我发现了elbas内部执行以下操作的 gem:

  • 将您的代码部署到连接到给定 AutoScale 组的每个正在运行的实例
  • 部署后,从正在运行的实例之一创建 AMI
  • 将带有新代码的 AMI 附加到新的 AWS 启动配置
  • 更新您的 AutoScale 组以使用新的启动配置
  • 删除 ELBAS 创建的任何旧 AMI
  • 删除 ELBAS 创建的任何旧启动配置

这基本上是第二个选项(通过脚本选项),找到一个可以为我做这件事的 gem,消除了手动处理事情的挑战。

希望这会有所帮助,干杯!


推荐阅读