如何在部署新代码后保持 AWS Auto-scaling Group 中的所有实例更新?
How to keep all instances in AWS Auto-scaling Group updated after deploying new code?
我正在尝试在 AWS 中构建一个更 dynamic/scalable 的系统。我在 AutoScaling 组 中启动了 2 个实例,其中 最小实例数 是 2 和 最大值 是 5,前面有一个 负载均衡器 .我在前两个实例上启用了 "Termination Protection",因为它们将成为我用于 部署 我的 Rails 通过 Capistrano 应用.
问题是我不确定什么是使我的自动缩放组中的所有实例保持最新的最佳方法,以便它们 运行 相同版本的应用程序。
我搜索了很多技术,以下是我认为适用但仍然不知道哪种是最好的。
1- AWS CodeDeploy: 看起来很酷,使用 Blue/Green Deployment 看起来可以很好地完成工作零停机时间。我不知道这是否有经验法则,但在我看来,部署时间有点长,我不确定是否当我需要发布修补程序时适用。
2- 通过脚本: 我也不确定如何使用 AWS 实现这个,但是,我的想法是当新代码上传到我的 2 "master (?)"实例,
- 我将使用新 AMI[=81=创建新启动配置 ]
- 更新自动缩放组以使用新的启动配置
- 缩减我的自动缩放组以终止运行使用旧配置的实例
- 希望自动缩放策略将使用新启动配置
创建新实例
这种方法的问题是它需要一些手动操作,我不想太依赖它。
3- 使用用户数据: 运行 具有拉取新版本代码的用户数据的新实例。我认为这不是一个好方法,因为可能会有其他实例已经 运行 使用旧代码。
那么这些是我到目前为止看到的解决方案,哪个是最好的解决方案?
干杯!
我最终使用扩展 gem(我的应用程序是在 rails 上用 ruby 编写的)进行部署。我已经在使用 Capistrano
进行部署,然后我发现 gem elbas
在内部执行以下操作:
- 将您的代码部署到连接到给定 AutoScale 组的每个 运行 实例
- 部署后,从 运行 个实例之一创建 AMI
- 将带有新代码的 AMI 附加到新的 AWS 启动配置
- 更新您的 AutoScale 组以使用新的启动配置
- 删除由 ELBAS 创建的所有旧 AMI
- 删除 ELBAS 创建的所有旧启动配置
这基本上是第二个选项(通过脚本选项),找到一个 gem 为我做这个,消除了手动处理事情的挑战。
希望这对您有所帮助,干杯!
我正在尝试在 AWS 中构建一个更 dynamic/scalable 的系统。我在 AutoScaling 组 中启动了 2 个实例,其中 最小实例数 是 2 和 最大值 是 5,前面有一个 负载均衡器 .我在前两个实例上启用了 "Termination Protection",因为它们将成为我用于 部署 我的 Rails 通过 Capistrano 应用.
问题是我不确定什么是使我的自动缩放组中的所有实例保持最新的最佳方法,以便它们 运行 相同版本的应用程序。
我搜索了很多技术,以下是我认为适用但仍然不知道哪种是最好的。
1- AWS CodeDeploy: 看起来很酷,使用 Blue/Green Deployment 看起来可以很好地完成工作零停机时间。我不知道这是否有经验法则,但在我看来,部署时间有点长,我不确定是否当我需要发布修补程序时适用。
2- 通过脚本: 我也不确定如何使用 AWS 实现这个,但是,我的想法是当新代码上传到我的 2 "master (?)"实例,
- 我将使用新 AMI[=81=创建新启动配置 ]
- 更新自动缩放组以使用新的启动配置
- 缩减我的自动缩放组以终止运行使用旧配置的实例
- 希望自动缩放策略将使用新启动配置 创建新实例
这种方法的问题是它需要一些手动操作,我不想太依赖它。
3- 使用用户数据: 运行 具有拉取新版本代码的用户数据的新实例。我认为这不是一个好方法,因为可能会有其他实例已经 运行 使用旧代码。
那么这些是我到目前为止看到的解决方案,哪个是最好的解决方案?
干杯!
我最终使用扩展 gem(我的应用程序是在 rails 上用 ruby 编写的)进行部署。我已经在使用 Capistrano
进行部署,然后我发现 gem elbas
在内部执行以下操作:
- 将您的代码部署到连接到给定 AutoScale 组的每个 运行 实例
- 部署后,从 运行 个实例之一创建 AMI
- 将带有新代码的 AMI 附加到新的 AWS 启动配置
- 更新您的 AutoScale 组以使用新的启动配置
- 删除由 ELBAS 创建的所有旧 AMI
- 删除 ELBAS 创建的所有旧启动配置
这基本上是第二个选项(通过脚本选项),找到一个 gem 为我做这个,消除了手动处理事情的挑战。
希望这对您有所帮助,干杯!