AWS CodeDeploy
User Guide (API 版本 2014-10-06)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

将 AWS CodeDeploy 与 Elastic Load Balancing 集成

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

传统负载均衡器

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

应用程序负载均衡器

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

Network Load Balancer

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

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

负载均衡器在 AWS CodeDeploy 部署中的作用

在 AWS CodeDeploy 部署期间,负载均衡器会阻止 Internet 流量路由到未就绪的实例,目前正在部署的实例,或环境不再需要的实例。但是,负载均衡器的具体作用取决于它是用于蓝/绿部署还是就地部署。

注意

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

蓝/绿部署

依托于 Elastic Load Balancing 负载均衡器来重新路由实例流量是 AWS CodeDeploy 蓝/绿部署的基础。

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

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

对于蓝/绿部署,您可以在部署组中指定 传统负载均衡器、应用程序负载均衡器 或 Network Load Balancer。您可以使用 AWS CodeDeploy 控制台或 AWS CLI 将负载均衡器添加到部署组。

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

就地部署

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

如果就地部署期间未使用负载均衡器,Internet 流量在部署过程中可能仍会引向该实例。因此,您的客户可能会遇到中断、不完整或过时的 Web 应用程序。在将 Elastic Load Balancing 负载均衡器用于就地部署时,部署组中的实例将从负载均衡器取消注册,更新为最新的应用程序修订,并在部署成功后向负载均衡器重新注册同一部署组。

对于就地部署,您可以指定 传统负载均衡器、应用程序负载均衡器 或 Network Load Balancer。您可以在配置部署组的过程中指定负载均衡器,或使用 AWS CodeDeploy 提供的脚本实施负载均衡器。

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

有关使用脚本在就地部署中指定负载均衡器的信息,请参阅以下主题:

使用脚本为就地部署设置负载均衡器

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

注意

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

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

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

  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 中,提供有关 AWS CodeDeploy 在 ApplicationStart 事件期间运行 register_with_elb.sh 脚本以及在 ApplicationStop 事件期间运行 deregister_from_elb.sh 脚本的说明。

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

    common_functions.sh 脚本中:

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

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

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