AWS AutoScaling Instance Cloning git



我正在使用自定义 AMI 在 AWS 中设置一个自动扩展组。我知道 AWS 为"用户数据"保留了一个部分,人们可以在其中输入他们的脚本,并且可以在创建实例时执行它们,但我想我更愿意将启动脚本烘焙到映像本身中。

我将创建自定义映像(设置 Web 服务器和所需的所有其他包(,然后需要创建一个启动脚本,例如将我的 git 存储库 (ssh( 克隆到"/var/www/"中。

我的问题是:将存储库直接克隆到 Web 服务器文件夹中有什么缺点吗?整个想法是:当负载均衡器上的负载过高时,将从 AMI 创建一个新实例,并且在启动时,实例将从私有 git 存储库中获取源代码。--> 关于执行此过程的最佳方法的任何建议?我将不胜感激一些指导!

至于将新代码部署到已经在运行的实例,我将为此使用 Capistrano。

提前感谢!

有几个缺点,是的:

  1. 如果存储库特别大,这将需要一段时间 - 你将在每个自动缩放引导程序上提取大量不需要的数据(可以使用 git 克隆 --depth=1 来尝试最小化下载的数据(。
  2. 您需要为此运行自己的单独远程,因为依靠第三方来部署代码并不是很好 - 您不希望在部署流程中依赖 github。
  3. 您的部署工件不会是不可变的,因为可以编辑标记/变基提交不存在/其他任何内容。

另一种方法是使用 fpm 之类的东西来构建部署工件,将其作为构建的一部分存储在 S3 中,然后使用 capistrano-artifact 让服务器在启动时从 S3 获取工件。天真地,你也可以在 S3 中加入一个特定的修订版和东西。这还有一个额外的好处,那就是下载速度超快。但是,您失去了一些回滚的灵活性 - 像slugforge这样的东西可能会通过将以前的车辆留在盒子上并明确支持基于符号链接的回滚来提供帮助。

顺便说一句,我认为您不将太多逻辑放入用户数据是明智的 - 您希望它尽可能简单,因为更改它意味着构建一个全新的启动配置。与其将引导程序放在 AMI 上,我建议将其存储在 S3 中并使用 runurl 从用户数据脚本执行它。

您可以尝试使用 git clone 命令中的选项 --depth=1 最小化下载的大小。这将使 git 只拉取包的最新版本。

最新更新