【发布时间】:2012-10-29 12:40:20
【问题描述】:
是否有一种通用策略来设置自动缩放脚本以更新 capistrano 部署层次结构中的代码,以便在自动缩放事件上启动 AMI 时从您的存储库中提取代码,以确保在自动缩放机器上运行的提交与非自动缩放实例?
【问题讨论】:
标签: ruby-on-rails amazon-ec2 amazon-web-services capistrano
是否有一种通用策略来设置自动缩放脚本以更新 capistrano 部署层次结构中的代码,以便在自动缩放事件上启动 AMI 时从您的存储库中提取代码,以确保在自动缩放机器上运行的提交与非自动缩放实例?
【问题讨论】:
标签: ruby-on-rails amazon-ec2 amazon-web-services capistrano
我运行一个有点像这样的设置。我选择不设置实例在启动时与 git 交互,因为:
我所做的是我部署的应用程序位于 /var/www/myapp。这实际上是一个单独的 EBS 卷,安装在该位置。文件系统是 xfs,因为您可以使用 xfs_freeze 安全地拍摄已安装卷的 ebs 快照
部署完成后,在钩子后的 capistrano 中,我对 /var/www/myapp 卷进行快照。然后我更新了自动缩放启动配置的块设备映射,说“当你启动一个实例时,从快照创建一个新卷并将它附加到 /dev/sdf。
实例在启动时所要做的就是将该设备挂载到 /var/www/myapp,方法是编辑 /etc/fstab 或运行一个超级简单的启动时间脚本。 Bundler 设置为将其 gem 保存在 /var/www/myapp/shared 中,因此 gem 也得到了照顾
【讨论】:
以防万一有人掉到这里,我刚刚发现了这个宝石:
https://github.com/lserman/capistrano-elbas
这将(如自述文件中所述):
- 将您的代码部署到连接到给定 AutoScale 组的每个正在运行的实例
- 部署后,从正在运行的实例之一创建 AMI
- 将带有新代码的 AMI 附加到新的 AWS 启动配置
- 更新您的 AutoScale 组以使用新的启动配置
- 删除由 ELBAS 创建的所有旧 AMI
- 删除由 ELBAS 创建的任何旧启动配置
因此它确保自动缩放组的所有实例(那些正在运行的和那些未来)将运行相同的代码。
希望对你有帮助
【讨论】: