部署到 AWS
介绍
本指南是AWS 部署策略的延续,将成为使用 AWS Codedeploy 设置应用程序部署的实践教程。
部署资源可能很棘手。需要进行严格的平衡,才能成功部署应用程序并将服务中断降至最低。任何可能对用户体验产生负面影响的服务中断都应得到极大缓解。在软件即服务 (SaaS) 领域,负面的用户体验可能会直接损害您组织的订阅收入。
为了解决部署带来的任何负面体验,AWS 允许在其服务中内置多种部署选项。在本指南中,我们将介绍使用 AWS Codedeploy 进行蓝/绿部署。
环境布局
本指南示例中显示的 AWS 环境将有两个子网。私有子网将包含自动扩展组中的 EC2 实例,其中两个 EC2 实例上安装了 Apache;公有子网将包含允许 EC2 实例访问互联网的 NAT 网关。
最后,所有资源都位于应用程序负载均衡器后面。负载均衡器配置为将端口 80 上的流量发送到其中一个 EC2 实例。用户将无法直接访问 Apache 网页。
这是 Codedeploy 运行之前默认的 Apache 页面。Codedeploy 运行之后,它将变为绿色横幅。
Codedeploy 配置为连接到 Github 存储库并使用存储库根目录中的appspec.yml文件。appspec.yml定义要针对 EC2 实例执行的生命周期挂钩。
下面是appspec.yml的一个示例。
version: 0.0
os: linux
files:
- source: /index.html
destination: /tmp
hooks:
BeforeInstall:
- location: scripts/install_dependencies.sh
timeout: 300
runas: root
AfterInstall:
- location: scripts/move_files.sh
timeout: 300
runas: root
ApplicationStop:
- location: scripts/stop_server.sh
timeout: 300
runas: root
ApplicationStart:
- location: scripts/start_server.sh
timeout: 300
runas: root
此部署有四个生命周期钩子:BeforeInstall、AfterInstall、ApplicationStop和ApplicationStart。这些将按顺序执行以安装新版本的 index.html。
您可以在此处查看完整的 Codedeploy 示例。
蓝色/绿色
蓝/绿将通过创建完全独立的环境来部署代码。 这两个环境在基础设施配置方面将类似,但都将在各自的自动扩展组中隔离。
最初,蓝色环境将运行 Apache,并使用旧版本的登录页面模拟应用程序。然后,使用 AWS Codedeploy 部署新版本的登录页面。
与在 DNS 级别路由流量的标准蓝绿部署不同,Codedeploy 将在目标组级别路由流量。在部署期间,实例将在可用时注册,并自动从目标组取消注册。
- 原始配置:
- 绿色实例注册:
- 取消注册蓝色实例并终止蓝色自动扩展组:
设置 Codedeploy
现在您将深入研究并配置 Codedeploy。选择 Codedeploy 服务并单击“创建应用程序”按钮。在出现的新页面中,输入应用程序名称(本示例中的应用程序名为“codedeploy-blue-green-1”)并选择EC2/On-residential作为计算平台。
接下来,您将通过单击“创建部署组”按钮来创建部署组。为部署组命名。本示例中的部署组名为“codedeploy-blue-green-dg”。
选择允许 Codedeploy 与 EC2 实例和自动扩展组交互的服务角色。如果您需要创建角色,请确保该角色具有AWSCodeDeployRole策略。在部署类型中选择蓝/绿。
在同一窗口中,向下滚动以配置部署组的其余部分。在环境配置部分中,选择自动复制 Amazon EC2 Auto Scaling 组和包含您的 Web 服务器的自动扩展组。
在部署设置下,确保流量重新路由设置为立即重新路由流量。这会将流量路由到部署期间启动的新绿色自动扩展组。通过将等待时间设置为零,立即终止原始实例(蓝色)。选择CodeDeployDefault.HalfAtATime作为部署配置。这将确保一次只升级自动扩展组中一半的实例。
继续向下滚动,您将在此页面中看到最终设置。在负载均衡器部分下,选择应用程序负载均衡器或网络负载均衡器。然后选择与您的应用负载均衡器关联的目标组。本示例中的目标组名为“test-tg”。
创建部署组后,就可以创建部署了!选择部署组并选择我的应用程序存储在 Github 中。这将允许 Codedeploy 从 Github 获取应用程序的新版本。
输入您的 Github 用户名作为 token 名称和存储库名称的路径。添加您要部署的应用程序版本的提交 ID。
配置部署设置后,单击开始部署。在出现的下一页中,您将能够监控部署状态
在页面的下方,您将能够监控每个实例上的生命周期挂钩状态。您可能还注意到已创建了另外两个实例。这些额外的实例是由 Codedeploy 在新的自动缩放组中创建的。
您现在要做的就是等待部署完成。如果您想知道原始 EC2 实例会发生什么,那么在第四步,原始实例将被终止。您可以在 EC2 实例控制台中查看正在终止的原始实例。
部署完成后,如果您再次访问负载均衡器 DNS 名称,您应该会看到绿色横幅。
注意:如果您遇到 EC2 实例无法从 Github 下载内容的问题,请确保为它们分配了 IAM 角色,允许它们从 S3 读取内容。您还必须在启动配置中指定角色,以便自动扩展组中的其他实例可以访问 Github。
结论
可以想象,手动发布过程非常耗时。使用 Codedeploy 和蓝/绿的示例部署大约需要 7 分钟才能完成。如果手动完成,涉及更多主机和数据库的更复杂的应用程序可能需要数小时才能完成。
Codedeploy 简化了操作并使其自动化!Codedeploy 还允许使用appspec.yml文件将您的部署视为代码。可以进行同行评审,以便团队中的每个人都可以对部署期间执行的步骤提供意见。最后,如果出现任何问题,Codedeploy 会设置防护栏,以便在部署遇到问题时回滚您的部署。
接下来是什么?现在 Codedeploy 已完全配置并顺利部署应用程序的新版本,您可以将其与您选择的 CI/CD 平台集成。Codepipeline、Jenkins、Bamboo 和 Gitlab-CI 都可以利用 Codedeploy。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~