如何dynamic创build新实例时在EC2上部署网页?

我们有一个网站需要每隔一段时间更新页面。 该站点有大约8个EC2实例在任何时候运行,但偶尔会变得更大。 我们使用负载均衡器和自动调节来创build更多的实例。 这些页面只是磁盘上的普通文件; 没有内容pipe理系统。 Web服务器是Jetty。

如果我修改一个页面,我怎样才能将它部署到所有当前和未来的实例?

很明显,我不能使用像Fabric这样的pipe理工具,因为它不会更新未来实例的AMI。 创build一个新的AMI并部署它也是一个错误,因为首先,这是一个麻烦的过程,其次,它会closures现有的实例上的所有当前用户会话。

我在想,这些实例需要从某个地方抽取网站的页面,并且每隔一段时间检查一次更新。

我想把页面放在S3上,但是这是一个不起步的原因,因为1)当页面被改变时,S3没有办法通知实例,2)所以你必须连续轮询S3,3)这是昂贵的,4)你必须为每个页面单独做。

什么是最简单的方法来做到这一点? 最好的方法是什么,如果最好!=简单?

我看到有几个选项:

  1. 使用S3; 我知道你表示这是一个非首发,但新的服务器必须从某处获取代码。 假设您的部署已经脚本化部署到正在运行的实例,添加一行来推送到S3。 这也可以通过人工控制工具自动完成。
  2. 创build一个主服务器,所有其他服务器都可以通过ssh轮询代码。
  3. 从代码托pipe服务,如github拉

你可以通过在自动缩放中使用一些克隆后的步骤来完成。 确切的方法取决于你的舒适度,但像这样的解决scheme可能会为你做很多事情:

  • build立你的网站目录像git。
  • 在AMI中,构build一个cron任务,按计划从repo-server中进行混帐。
  • 在AMI中,构build一个git-pull作为启动任务的一部分。

这是一种批处理模式方法。 现有的服务器不会收到新文件的通知,但是由于cron执行时间,它们几乎同时都会得到它们。 新服务器在启动时将获得新文件。

这里的关键是将您的内容与AMI本身分离。