如何正确部署新代码到AWS EC2 AutoScaling Group

如何正确部署新代码到AWS EC2 AutoScaling Group

设想:
目前,我们在 EC2 实例上运行着一台生产服务器。由于流量很大,我们想使用自动扩展功能,但我们对此还不太熟悉。

以下是我的理解:
- 我们从现有的生产服务器创建自定义 AMI
- 从此 AMI 创建启动配置
- 使用此启动配置创建自动缩放组
- 设置条件,如果 CPU 使用率大于 60%,则添加一个实例,如果小于 40%,则终止 1 个实例。
- 向此自动缩放组添加负载均衡器
- 现在据我所知,要将新代码部署到自动缩放组,我们必须使用更新的应用程序版本创建一个新的 AMI,并将自动缩放组中使用的 AMI 更改为这个新的。然后终止所有先前的实例并从更新的 AMI 创建新的实例。

问题:
1. 要创建更新的 AMI,我是否必须保留不属于自动扩展组的先前 EC2 实例?
在那里部署新代码并从该实例创建 AMI?
2. 或者,我们可以不创建新的 AMI,而是直接 ssh 进入每个服务器并从那里提取新代码?但生成的新实例将使用先前的代码。3
. 此外,在添加新 AMI 后,我们如何正确终止所有先前的实例?
4. 最后,我们如何正确地实现自动化?

答案1

绝不依靠 ssh 连接到新创建的实例 - 它们可以随时来去。

您可以使用以下方式自动设置实例启动配置用户数据您可以在其中运行任何您喜欢的 bash 脚本。该脚本可以安装和配置您的 Web 服务器并提取任何代码。但是,如果您稍后更新代码,则必须通过 SSH 连接到每个实例才能部署新版本。所以这不是最佳策略。

最好的使用类似的工具亚马逊AWS官方博客可以为您完成所有工作。使用代码部署,流程如下:

  1. 创建您的预配置了 Web 服务器的 AMI(或使用上面提到的用户数据在启动时对其进行配置)。请注意,此时您只有网络服务器,而不是实际的网站代码。

  2. 启动 CodeDeploy 代理自动位于 UserData 脚本的末尾。

  3. 代理将连接到 CodeDeploy 服务器并拉取最新的网站文件(PHP、Java……)。

  4. 如果你开发了一个新版本网站(例如一个新的 Java WAR 文件),您将指示 CodeDeploy 将其推送到所有当前活动的节点。

这样,加入 Auto Scaling 组的主机会自动获取最新的网站代码,您不必一直重建 AMI。

希望有帮助:)

相关内容