将 CodeDeploy 与 Elastic Load Balancing 集成
在 CodeDeploy 部署期间,负载均衡器会阻止 Internet 流量路由到未就绪的实例,目前正在部署的实例,或环境不再需要的实例。但是,负载均衡器的具体作用取决于它是用于蓝/绿部署还是就地部署。
Elastic Load Balancing 负载均衡器的使用在蓝/绿部署中为必需,在就地部署中为可选。
Elastic Load Balancing 类型
Elastic Load Balancing 提供了三种可用于 CodeDeploy 部署的负载均衡器:Classic Load Balancer、Application Load Balancer 和 Network Load Balancer。
- 传统负载均衡器
-
路由和负载均衡在传输层 (TCP/SSL) 或应用程序层 (HTTP/HTTPS) 进行。它支持 EC2-Classic 或 VPC。
- 应用程序负载均衡器
-
路由和负载均衡在应用程序层 (HTTP/HTTPS) 进行,并支持基于路径的路由。它可以将请求路由到您的 Virtual Private Cloud (VPC) 中每个 EC2 实例或容器实例上的端口。
注意 目标组的目标类型必须为 应用程序负载均衡器(对于 EC2 实例上的部署)和
instance
(对于 Fargate 部署)。IP
有关更多信息,请参阅目标类型。 - Network Load Balancer
-
路由和负载均衡在传输层(TCP/UDP 层,即第 4 层)进行,依据是从 TCP 数据包标头中而非从数据包内容中提取的地址信息。Network Load Balancer 可以处理突发流量、保留客户端的源 IP 以及在负载均衡器的使用寿命内使用固定 IP。
要了解有关 Elastic Load Balancing 负载均衡器的更多信息,请参阅以下主题:
蓝/绿部署
依托于 Elastic Load Balancing 负载均衡器来重新路由实例流量是 CodeDeploy 蓝/绿部署的基础。
在蓝/绿部署期间,负载均衡器根据您指定的规则,允许将流量路由到已部署最新应用程序修订的部署组中的新实例 (替换环境),然后阻止运行较早应用程序修订的旧实例的流量 (原始环境)。
替换环境中的实例注册负载均衡器后,将取消注册原始环境中的实例,并根据您的需要终止。
对于蓝/绿部署,您可以在部署组中指定 传统负载均衡器、应用程序负载均衡器 或 Network Load Balancer。您可以使用 CodeDeploy 控制台或 AWS CLI 将负载均衡器添加到部署组。
有关在蓝/绿部署中使用负载均衡器的更多信息,请参阅以下主题:
就地部署
在就地部署的过程中,负载均衡器可以防止 Internet 流量路由到要部署的实例;实例部署完成后,可恢复对该实例的流量路由。
如果就地部署期间未使用负载均衡器,Internet 流量在部署过程中可能仍会引向该实例。因此,您的客户可能会遇到中断、不完整或过时的 Web 应用程序。在将 Elastic Load Balancing 负载均衡器用于就地部署时,部署组中的实例将从负载均衡器取消注册,更新为最新的应用程序修订,并在部署成功后向负载均衡器重新注册同一部署组。CodeDeploy 将最多等待 1 个小时,以使实例在负载均衡器后面正常运行。如果在等待期间,负载均衡器未将实例标记为运行状况良好,CodeDeploy 将根据部署配置移动到下一个实例或部署失败。
对于就地部署,您可以指定 传统负载均衡器、应用程序负载均衡器 或 Network Load Balancer。您可以在配置部署组的过程中指定负载均衡器,或使用 CodeDeploy 提供的脚本实施负载均衡器。
使用部署组指定就地部署负载均衡器
可以使用 CodeDeploy 控制台或 AWS CLI 将负载均衡器添加到部署组。有关就地部署期间在部署组中指定负载均衡器的信息,请参阅以下主题:
使用脚本指定就地部署负载均衡器
通过执行以下过程中的步骤,使用部署生命周期脚本为就地部署设置负载均衡。
只有在使用脚本为就地部署设置负载均衡器时,才应使用 CodeDeployDefault.OneAtATime 部署配置。不支持并发运行,并且 CodeDeployDefault.OneAtATime 设置可确保脚本的顺序执行。有关部署配置的更多信息,请参阅在 CodeDeploy 中使用部署配置。
在 CodeDeploy 上的 GitHub 示例存储库中,我们提供了说明和示例,您可以对其进行调整以使用 CodeDeploy Elastic Load Balancing
负载均衡器。这些存储库包含三个示例脚本 — register_with_elb.sh
、deregister_from_elb.sh
和 common_functions.sh
— 这些脚本提供了开始操作所需的全部代码。只需编辑这 3 个脚本中的占位符,然后从 appspec.yml
文件中引用这些脚本。
要使用已注册到 Elastic Load Balancing 负载均衡器的 Amazon EC2 实例设置 CodeDeploy 中的就地部署,请执行以下操作:
-
下载要用于就地部署的负载均衡器的类型的示例:
-
确保每个目标 Amazon EC2 实例均已安装 AWS CLI。
-
确保每个目标 Amazon EC2 实例均已附加至少一个 IAM 实例配置文件,并且具有 elasticloadbalancing:* 和 autoscaling:* 权限。
-
将部署生命周期事件脚本 (
register_with_elb.sh
、deregister_from_elb.sh
和common_functions.sh
) 包含在应用程序的源代码目录中。 -
在应用程序修订的
appspec.yml
中,提供 CodeDeploy 在register_with_elb.sh
ApplicationStart 事件期间运行deregister_from_elb.sh
脚本以及在 ApplicationStop 事件期间运行 脚本的说明。 -
如果实例属于某个 Amazon EC2 Auto Scaling 组,则可跳过此步骤。
在
common_functions.sh
脚本中:-
如果您使用的是 传统负载均衡器
,请在 ELB_LIST=""
中指定 Elastic Load Balancing 负载均衡器的名称,并对文件中的其他部署设置进行所需的任何更改。 -
如果您使用的是 应用程序负载均衡器 或 Network Load Balancer
,请在 TARGET_GROUP_LIST=""
中指定 Elastic Load Balancing 目标组的名称,并对文件中的其他部署设置进行所需的任何更改。
-
-
将应用程序的源代码、
appspec.yml
和部署生命周期事件脚本绑定到一个应用程序修订中,然后上传该修订。将该修订部署到 Amazon EC2 实例。在部署期间,部署生命周期事件脚本将向负载均衡器取消注册 Amazon EC2 实例,等待连接耗尽,然后在部署完成后向负载均衡器重新注册 Amazon EC2 实例。