ruby-on-rails - 如何将最新代码推送到自动伸缩组中

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

我尝试使用 AWS 自动扩展框架运行我的生产服务器。

我想知道如何将新发布的代码部署到正在运行的生产服务器中。

我目前不关心停机时间

我使用 nginxpuma 运行 Web 服务器

完成此任务的常用方法是什么?

我想登录AWS控制台找到所有服务器的IP和SSH。更新代码库并重新启动 puma Web 服务器并不是维持产品质量的好方法

最佳答案

在 Amazon EC2 实例上部署代码的方法有多种选择。事实上,它与在任何普通计算机上部署代码的方式基本相同,但 Amazon EC2 有一些技术可以使这一切变得更容易。

选项 1:配置 AMI

启动新的 Amazon EC2 实例时,必须选择 Amazon 系统镜像 (AMI)。 AMI 是一个磁盘镜像,它被复制到新实例的启动磁盘,然后实例将使用该镜像启动。

因此,部署新代码的一种选择是:

  • 构建新的 AMI(通过配置实例,然后从该实例创建镜像)
  • 创建使用新 AMI 的新 Auto Scaling 启动配置
  • 编辑 Auto Scaling 组以使用新的启动配置
  • 在 Auto Scaling 组中启动新实例(例如增加最小实例数量)
  • 新实例启动后,删除旧实例(例如减少最小值并等待自动缩减流程,或通过降低所需容量强制减少. 较旧的实例将首先自动删除,基于 Auto Scaling Termination Policy

选项 2:用户数据脚本

这与选项 1 类似,但不是配置新的 AMI,而是通过启动脚本进行实例自配置。脚本可以通过 User Data field 传递并且该脚本将在启动新实例时执行。

该脚本可以执行您想要的任何操作,例如下载并安装软件、使用 Puppet/Chef/Ansible 进行部署以及启动/停止 Web 服务器。

用户数据脚本应存储在 Auto Scaling 启动配置中(类似于选项 1 中的 AMI)。然后,只需启动新实例(类似于选项 1),它们就会自动使用最新版本的软件进行配置。

选项 3:使用部署服务

AWS 有多个可以将代码部署到 Amazon EC2 实例的系统,包括:

前三个可以部署基础设施和代码。

虽然这些系统比简单地提供脚本更复杂,但它们允许更具可重复性、弹性的架构(例如处理故障和回滚)。

关于ruby-on-rails - 如何将最新代码推送到自动伸缩组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31806677/

相关文章:

ruby-on-rails - 如何在 ActiveRecord 中使用无限范围

amazon-web-services - AWS Cloudformation 创建 CachePolicy 组件时出错

amazon-web-services - 如何使用 CF 正确配置 Route53 HealthCheck 警报(悉尼)

database - Firestore 每秒向一个集合写入 500 多次

ruby-on-rails - 在 Rails 中没有其他查询的情况下限制急切加载 `where`

ruby-on-rails - Rails事件记录的 'where'方法异常

java - 将 Java 应用程序连接到 Ruby on Rails SQLite3 数据库

mysql - 将数据从 Amazon S3 导入到新的 MySQL 数据库实例时,AWS 不向我显示 "S3 Bucket"选项

javascript - Node.js 进程在 AWS Fargate 中的行为如何?

amazon-web-services - AWS 自动扩展 ELB 状态检查宽限期