部署新代码后,如何使AWS Auto-scaling Group中的所有实例保持更新?

时间:2018-09-19 13:36:00

标签: ruby-on-rails amazon-web-services deployment capistrano autoscaling

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

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

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

1- AWS CodeDeploy:看起来很酷,使用 Blue / Green Deployment 看起来很不错,停机时间为零。我不知道是否有经验法则,但是我认为部署时间有点长,我不确定是否会适用于需要发布修补程序的情况

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

  1. 我将使用新AMI
  2. 创建新启动配置
  3. 更新自动缩放组,以使用新的启动配置
  4. 缩小我的自动伸缩组,以终止正在运行旧配置的实例
  5. 希望自动缩放策略将使用新的启动配置创建新实例

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

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

那么,这些是我到目前为止看到的解决方案,哪一个是最佳解决方案?

干杯!

1 个答案:

答案 0 :(得分:2)

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

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

这基本上是第二个选项(通过“脚本”选项),找到对我有用的宝石,消除了手动处理事物的挑战。

希望这会有所帮助,加油!