CodeDeploy 与 Elastic Load Balancing - AWS CodeDeploy

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

CodeDeploy 与 Elastic Load Balancing

在 CodeDeploy 部署期间,当互联网流量尚未准备就绪、正在部署到或不再需要作为环境的一部分时,负载均衡器会阻止将互联网流量路由到这些实例。但是,负载均衡器的具体作用取决于它是用于蓝/绿部署还是就地部署。

注意

Elastic Load Balancing 负载均衡器的使用在蓝绿部署中为必需,在就地部署中为可选。

Elastic Load Balancing 类型

Elastic Load Balancing 提供了三种可用于 CodeDeploy 部署的负载均衡器:传统负载均衡器、应用程序负载均衡器和网络负载均衡器。

Classic 负载均衡器

路由和负载均衡在传输层(TCP/SSL)或应用程序层(HTTP/HTTPS)进行。它支持 VPC。

注意

Amazon ECS 部署不支持经典负载均衡器。

应用程序负载均衡器

路由和负载均衡在应用程序层(HTTP/HTTPS)进行,并支持基于路径的路由。它可以将请求路由到您的 Virtual Private Cloud(VPC)中每个 EC2 实例或容器实例上的端口。

注意

在 EC2 实例上部署时,应用程序负载均衡器目标组的目标类型必须是 instance;在 Fargate 上部署时,目标组的目标类型必须是 IP。有关更多信息,请参阅目标类型

网络负载均衡器

路由和负载均衡在传输层(TCP/UDP 层,即第 4 层)进行,依据是从 TCP 数据包标头中而非从数据包内容中提取的地址信息。Network Load Balancer 可以处理突发流量,保留客户端的源 IP,并在负载均衡器的使用寿命内使用固定 IP。

要了解有关 Elastic Load Balancing 负载均衡器的更多信息,请参阅以下主题:

蓝/绿部署

在 Elastic Load Balancing 负载均衡器后面重新路由实例流量是 CodeDeploy蓝/绿部署的基础。

在蓝/绿部署期间,负载均衡器根据您指定的规则,允许将流量路由到已部署最新应用程序修订的部署组中的新实例(替换环境),然后阻止运行较早应用程序修订的旧实例的流量(原始环境)。

替换环境中的实例注册一个或多个负载均衡器后,将取消注册原始环境中的实例,并根据您的需要终止。

对于蓝绿部署,您可以在部署组中指定一个或多个经典负载均衡器、应用程序负载均衡器目标组或网络负载均衡器目标组。您可以使用 CodeDeploy 控制台或 AWS CLI 将负载均衡器添加到部署组。

有关在蓝/绿部署中使用负载均衡器的更多信息,请参阅以下主题:

就地部署

在就地部署的过程中,负载均衡器可以防止 Internet 流量路由到要部署的实例;实例部署完成后,可恢复对该实例的流量路由。

如果就地部署期间未使用负载均衡器,Internet 流量在部署过程中可能仍会引向该实例。因此,您的客户可能会遇到中断、不完整或过时的 Web 应用程序。当您将 Elastic Load Balancing 负载均衡器与就地部署一起使用时,部署组中的实例将从负载均衡器中注销,使用最新的应用程序版本进行更新,然后在部署成功后作为同一部署组的一部分在负载均衡器中重新注册。 CodeDeploy 将在负载均衡器后等待最多 1 小时以使实例运行正常。如果在等待期间负载均衡器未将该实例标记为运行正常,则根据部署配置, CodeDeploy 要么移动到下一个实例,要么部署失败。

对于就地部署,您可以指定一个或多个经典负载均衡器、应用程序负载均衡器目标组或网络负载均衡器目标组。您可以将负载均衡器指定为部署组配置的一部分,也可以使用提供的脚本 CodeDeploy 来实现负载均衡器。

使用部署组指定就地部署负载均衡器

要将负载均衡器添加到部署组,请使用 CodeDeploy 控制台或 AWS CLI。有关就地部署期间在部署组中指定负载均衡器的信息,请参阅以下主题:

使用脚本指定就地部署负载均衡器

通过执行以下过程中的步骤,使用部署生命周期脚本为就地部署设置负载均衡。

注意

你应该使用 CodeDeployDefault. OneAt仅当您使用脚本为就地部署设置负载均衡器时,才会配置 Atime 部署。不支持并发运行,并且 CodeDeployDefault. OneAtAtime 设置可确保脚本的串行执行。有关部署配置的更多信息,请参阅在中使用部署配置 CodeDeploy

在的 CodeDeploy 示例存储库中 GitHub,我们提供了您可以调整以使用 CodeDeploy Elastic Load Balancing 负载均衡器的说明和示例。这些存储库包含三个示例脚本(register_with_elb.shderegister_from_elb.shcommon_functions.sh),这些脚本提供了开始操作所需的全部代码。只需编辑这 3 个脚本中的占位符,然后从 appspec.yml 文件中引用这些脚本。

要 CodeDeploy 使用注册到 Elastic Load Balancing 负载均衡器的 Amazon EC2 实例进行就地部署,请执行以下操作:

  1. 下载要用于就地部署的负载均衡器的类型的示例:

  2. 确保您的每个目标 Amazon EC2 实例都 AWS CLI 安装了。

  3. 确保每个目标 Amazon EC2 实例均已附加至少一个 IAM 实例配置文件,并且具有 elasticloadbalancing:* 和 autoscaling:* 权限。

  4. 将部署生命周期事件脚本(register_with_elb.shderegister_from_elb.shcommon_functions.sh)包含在应用程序的源代码目录中。

  5. appspec.yml应用程序修订版中,提供有关 CodeDeploy 在活动期间运行register_with_elb.sh脚本和在ApplicationStart活动期间运行deregister_from_elb.sh脚本的ApplicationStop说明。

  6. 如果实例属于某个 Amazon EC2 Auto Scaling 组,则可跳过此步骤。

    common_functions.sh 脚本中:

    • 如果您使用的是经典负载均衡器,请在 ELB_LIST="" 中指定 Elastic Load Balancing 负载均衡器的名称,并对文件中的其他部署设置进行所需的任何更改。

    • 如果您使用的是应用程序负载均衡器或网络负载均衡器,请在 TARGET_GROUP_LIST="" 中指定 Elastic Load Balancing 目标组的名称,并对文件中的其他部署设置进行所需的任何更改。

  7. 将应用程序的源代码、appspec.yml 和部署生命周期事件脚本绑定到一个应用程序修订中,然后上传该修订。将该修订部署到 Amazon EC2 实例。在部署期间,部署生命周期事件脚本将向负载均衡器取消注册 Amazon EC2 实例,等待连接耗尽,然后在部署完成后向负载均衡器重新注册 Amazon EC2 实例。