AWS CodeDeploy
User Guide (API Version 2014-10-06)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

将 AWS CodeDeploy 与 Elastic Load Balancing 集成

Elastic Load Balancing 是一种可跨多个可用区中多个 Amazon EC2 实例自动分发传入的应用程序流量的 AWS 服务。Elastic Load Balancing 支持的两种类型的负载均衡器 (Classic 和应用程序) 均可在 AWS CodeDeploy 就地部署中使用。在蓝/绿部署中,需要 Classic Load Balancer。

Classic Load Balancer 在传输层 (TCP/SSL) 或应用程序层 (HTTP/HTTPS) 制定路由和负载均衡决策。它支持 EC2-Classic 或 VPC。Application Load Balancer 在应用程序层 (HTTP/HTTPS) 制定路由和负载均衡决策并支持基于路径的路由。它可以将请求路由到您的 Virtual Private Cloud (VPC) 中每个 EC2 实例或容器实例上的端口。

有关 Elastic Load Balancing 的更多信息,请参阅以下主题:

蓝/绿部署

有关在蓝/绿部署中使用 Elastic Load Balancing 负载均衡器的信息,请参阅创建部署

就地部署

在运行应用程序(包括 Web 服务)时,您的 Amazon EC2 实例很可能会向 Elastic Load Balancing 负载均衡器注册。在使用 AWS CodeDeploy 将代码部署到其中一个 Amazon EC2 实例时,您不希望负载均衡器在部署过程中将流量发送到该实例。您可以使用 AWS CodeDeploy 中的部署生命周期事件脚本将代码部署到已注册到负载均衡器的 Amazon EC2 实例。

注意

此外,您可以使用作为 Auto Scaling 组的一部分的 Amazon EC2 实例设置 AWS CodeDeploy 中的部署。有关更多信息,请参阅 Auto Scaling

在 GitHub 上的 AWS CodeDeploy 示例存储库中,我们提供了一些指令和示例,您可以对其进行改编以将 AWS CodeDeploy 用于 Classic Load Balancer 和 Application Load Balancer。这些存储库包含三个示例脚本(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 脚本中:

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

    • 如果您使用的是Application Load Balancer,请在 TARGET_GROUP_LIST="" 中指定 Elastic Load Balancing 目标组的名称,并对文件中的其他部署设置进行所需的任何更改。

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