8

是否有一种通用策略来设置自动缩放脚本以更新 capistrano 部署层次结构中的代码,以便在自动缩放事件上启动 AMI 时从存储库中提取代码,以确保在自动缩放机器上运行的提交与非自动缩放上的提交匹配实例?

4

2 回答 2

12

我运行一个有点像这样的设置。我选择不将实例设置为在启动时与 git 交互,因为:

  • 我希望实例快速出现(部署 + 捆绑安装可能需要一段时间)
  • 我希望扩大/替换实例不依赖于 GitHub、rubygems 等
  • 我希望扩展一个实例非常简单

我所做的是我部署的应用程序位于/var/www/myapp。这实际上是一个单独的 EBS 卷,安装在该位置。文件系统是 xfs,因为您可以使用 xfs_freeze 安全地拍摄已安装卷的 ebs 快照

部署完成后,在钩子后的 capistrano 中,我对 /var/www/myapp 卷进行快照。然后我更新了自动缩放启动配置的块设备映射,说“当你启动一个实例时,从快照创建一个新卷并将它附加到 /dev/sdf.

启动时实例所要做的就是将该设备挂载到 /var/www/myapp,方法是编辑 /etc/fstab 或运行一个超级简单的启动时间脚本。Bundler 设置为将其 gems 保存在 /var/www/myapp/shared 中,因此 gems 也得到了照顾

于 2012-11-09T07:51:42.503 回答
3

以防万一有人掉到这里,我刚刚发现了这个宝石:

https://github.com/lserman/capistrano-elbas

这将(如自述文件中所述):

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

因此,它确保自动缩放组的所有实例(那些正在运行的和那些未来的)将运行相同的代码。

希望这可以帮助

于 2016-01-27T09:26:09.503 回答