AWS的自动部署工具codedeploy 负载均衡器和github

Elastic Load Balancing 提供了三种可用于 CodeDeploy 部署的负载均衡器:Classic Load Balancer、Application Load Balancer 和 Network Load Balancer。html

传统负载均衡器

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

应用程序负载均衡器

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

注意

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

Network Load Balancer浏览器

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

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

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

注意负载均衡

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

蓝/绿部署

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

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

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

对于蓝/绿部署,您能够在部署组中指定 传统负载均衡器、应用程序负载均衡器 或 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 进行的部署