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

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

我正在尝试在 中构建一个更动态/可扩展的系统AWS .我已推出 2 个实例 AutoScaling 组 哪里最小实例数 2 最大 5 负载均衡器在他们面前。我有 启用“终止保护”在前两个实例中,因为它们将是我用于 的实例。正在部署 我的 通过 Capistrano 应用 Rails .

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

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

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

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

  • 我会创建 新的启动配置 使用 新 AMI
  • 更新自动缩放组 使用新的启动配置
  • 缩小 我的自动缩放组到 终止实例 运行旧配置
  • 希望自动缩放策略能够创建新实例 使用 新启动配置

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

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

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

    干杯!

    最佳答案

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

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

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

    希望这有帮助,干杯!

    关于ruby-on-rails - 部署新代码后,如何让 AWS Auto-scaling Group 中的所有实例保持更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52407196/

    相关文章:

    ruby-on-rails - ActiveRecord::Fixture::FixtureError:表 "users"没有名为 "status"的列

    ruby-on-rails - Ruby on Rails 3.2.13 - Brakeman - session secret 不应包含在版本控制中

    FaceBook 通过 HTTP POST 加载 HTTPS 托管的 iframe 应用程序(S3 和 CloudFront 错误)

    python - Dynamodb - 查询列表是否包含

    amazon-web-services - AWS Data Pipeline S3 到 DynamoDB JSON 错误

    ssl - Azure App Service 证书 (dev) 问题上的身份服务器 4 部署

    java - 可执行的Java应用程序(JAR),其中包含数据库

    eclipse - 使用 Eclipse 插件进行 AppEngine 部署期间出现错误 401 未经授权(无效的 OAuth token )

    ruby-on-rails - Rails 4 - 所有测试都失败(甚至断言 true)

    ruby-on-rails - Rails 3.2 bootstrap-sass 未安装