我有一个安装了Web服务器的EC2实例,其中有几个带有数据库的dynamic网站被托pipe。 我设置了一个自动缩放组,在CPU负载很高时启动新的实例。
我的困惑是,当一个新的实例通过自动扩展启动时,它是完全空的,它没有安装Web服务器,也没有来自我的站点的数据。 所以当一个用户被路由到这个新的实例,他将无法看到我的网站。 我认为它应该克隆新实例的文件系统,以便从自动缩放组启动的所有实例中访问相同的数据。
所以我认为我应该克隆我的实例以某种方式使用它来自动缩放和负载平衡。 那我该怎么做? 我应该从正在运行的实例创build一个AMI,并将其用于启动configuration,并将包含我的网站数据? 或者我应该使用CodeDeployment之类的东西,是否可以部署多个应用程序(我的所有网站),这将如何影响实例启动时间?
从configuration的网站(EC2实例)创build一个AMI。 在启动configuration中使用此AMI。 这是使用Auto Scaling组启动新(或replace)实例的最简单方法。
您也可以在启动时configuration服务器,但是您需要考虑安装软件需要多长时间,configuration所有内容并等待软件正常运行。 对于简单的网站,这可以很快,但对于复杂的网站与数据库等,这可能太长。
当ASG确定需要另一个实例时,您希望实例尽快上线。 预configuration的AMI是一个好的(或最好的)解决scheme。
[编辑添加后的评论]
预configuration的AMI基本上要求自动扩展的EC2实例是“无状态的”或者在启动时下载它们的状态(想想EC2用户数据脚本)。 数据库通常是有状态的,所以这些应该移到ASG之外。 RDS是一个很好的数据库pipe理服务。 最终的devise需要考虑您的系统提供的所有组件和服务。