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 实例或容器实例上的端口。

注意

应用程序负载均衡器 目标组必须有一个目标类型 instance;

Network Load Balancer

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

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

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

注意

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

蓝/绿部署

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

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

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

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

就地部署

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

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

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

可以使用 CodeDeploy 控制台或 AWS CLI 将负载均衡器添加到部署组;

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

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

注意

您应该仅在使用脚本为就地部署设置负载均衡器时使用 CodeDeployDefault.OneAtATime 部署配置。不支持并发运行,并且 CodeDeployDefault.OneAtATime 设置可确保脚本的顺序执行;

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

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

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

  2. 确保每个目标 Amazon EC2 实例均已安装 AWS CLI。

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

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

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

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

    在 common_functions.sh 脚本中:

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

  7. 如果您使用的是 应用程序负载均衡器 或 Network Load Balancer,请在 TARGET_GROUP_LIST="" 中指定 Elastic Load Balancing 目标组的名称,并对文件中的其他部署设置进行所需的任何更改。
  8. 将应用程序的源代码、appspec.yml 和部署生命周期事件脚本绑定到一个应用程序修订中,然后上传该修订。将该修订部署到 Amazon EC2 实例。在部署期间,部署生命周期事件脚本将向负载均衡器取消注册 Amazon EC2 实例,等待连接耗尽,然后在部署完成后向负载均衡器重新注册 Amazon EC2 实例。

从 GitHub 部署 CodeDeploy 修订

要将应用程序修订从 GitHub 存储库部署到实例,请执行以下步骤:

  1. 创建与 CodeDeploy 和将部署到的 Amazon EC2 实例类型兼容的修订。

    要创建兼容版本,请按照计划 CodeDeploy 的修订将应用程序规范文件添加到 CodeDeploy 的修订中的说明执行操作。

  2. 使用 GitHub 账户将您的修订添加到 GitHub 存储库。

  3. 使用 CodeDeploy 控制台中的创建部署页或使用 AWS CLI create-deployment 命令将修订从 GitHub 存储库部署到已配置为在 CodeDeploy 部署中使用的目标实例。

    如果您需要调用 create-deployment 命令,则必须先使用此控制台的创建部署页,针对指定应用程序为 CodeDeploy 授予代表您的首选 GitHub 账户与 GitHub 交互的权限。每个应用程序只需进行一次这样的操作。

github和codedeploy之间的交互:

GitHub 对 CodeDeploy 中的应用程序进行的身份验证

在向 CodeDeploy 提供与 GitHub 交互的权限后,GitHub 账户和应用程序之间的关联将存储在 CodeDeploy 中。您可以将应用程序链接到其他 GitHub 账户。也可以撤消 CodeDeploy 与 GitHub 交互的权限。

将 GitHub 账户链接到 CodeDeploy 中的应用程序

  1. Sign in to the AWS 管理控制台 and open the CodeDeploy console at https://console.aws.amazon.com/codedeploy.

    注意

    使用您在 CodeDeploy 入门中使用的相同账户或 IAM 用户信息登录。

  2. 在导航窗格中,展开 Deploy (部署),然后选择 Applications (应用程序)

  3. 选择要链接到其他 GitHub 账户的应用程序。

  4. 如果应用程序没有部署组,请选择创建部署组来创建一个部署组

  5. 部署中,选择创建部署

    注意

    无需创建新的部署。这是目前将其他 GitHub 账户链接到应用程序的唯一方式。

  6. 部署设置中,对于修订类型,选择我的应用程序将存储在 GitHub 中

  7. 执行以下操作之一:

    • 要为 CodeDeploy 应用程序创建与 GitHub 账户的连接,在单独的 Web 浏览器选项卡中注销 GitHub。在 GitHub 令牌名称中,键入一个名称来标识此连接,然后选择连接到 GitHub。该网页将提示授权 CodeDeploy 与应用程序的 GitHub 进行交互。继续执行步骤 10。

    • 要使用已创建的连接,请在 GitHub 令牌名称中,选择其名称,然后选择连接到 GitHub。继续执行步骤 8。

    • 要创建与其他 GitHub 账户的连接,在单独的 Web 浏览器选项卡中注销 GitHub。在 GitHub 令牌名称中,键入一个名称来标识此连接,然后选择连接到 GitHub。该网页将提示授权 CodeDeploy 与应用程序的 GitHub 进行交互。继续执行步骤 10。

  8. 如果尚未登录 GitHub,请按照 Sign in 页上的说明执行操作以使用要将应用程序链接到的 GitHub 账户进行登录。

  9. 选择 Authorize application。GitHub 向 CodeDeploy 提供代表所选应用程序的已登录 GitHub 账户与 GitHub 交互的权限。

  10. 如果您需要创建部署,请选择 Cancel

撤消 CodeDeploy 的与 GitHub 交互的权限

  1. 使用要撤消 CodeDeploy 权限的 GitHub 账户的凭证登录到 GitHub

  2. 打开 GitHub 应用程序页,在已授权应用程序列表中找到 CodeDeploy,然后按照用于撤消应用程序授权的 GitHub 过程执行操作。

CodeDeploy 与私有和公有 GitHub 存储库进行交互

CodeDeploy 支持从私有和公有 GitHub 存储库部署应用程序。当您向 CodeDeploy 授予代表您访问 GitHub 的权限后,CodeDeploy 针对您的 GitHub 账户有权访问的所有私有 GitHub 存储库都将拥有读写访问权。不过,CodeDeploy 只能从 GitHub 存储库进行读取。它将不会对任何私有 GitHub 存储库进行写入。

CodeDeploy 与组织托管的 GitHub 存储库进行交互

默认情况下,组织托管的 GitHub 存储库(与账户自己的私有或公有存储库相对)未授予对第三方应用程序(包括 CodeDeploy)的访问权。如果在 GitHub 中启用组织的第三方应用程序限制,并且您尝试从其 GitHub 存储库中部署代码,则部署将失败。可通过两种方式解决此问题。

  • 作为组织成员,您可以要求组织所有者批准对 CodeDeploy 的访问权。请求此访问权的步骤取决于您是否已授权单个账户访问 CodeDeploy

    使用 CodeDeploy 自动从 CodePipeline 进行部署

    当源代码发生更改时,您可以触发从 CodePipeline 进行的部署

04-21 20:52