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

什么是 AWS CodeDeploy?

AWS CodeDeploy 是一项部署服务,可以向 Amazon EC2 实例、本地实例或无服务器 Lambda 函数自动执行应用程序部署。

您几乎可以部署无限种类的应用程序内容,例如代码、无服务器 AWS Lambda 函数、Web 文件和配置文件、可执行文件、程序包、脚本、多媒体文件,等等。AWS CodeDeploy 可以部署那些在一个服务器上运行并在 Amazon S3 存储桶、GitHub 存储库或 Bitbucket 存储库中存储的应用程序内容。AWS CodeDeploy 还可以部署无服务器 Lambda 函数。您无需更改现有代码即可开始使用 AWS CodeDeploy。

AWS CodeDeploy 能让您更轻松地执行以下操作:

  • 快速发布新功能。

  • 更新 AWS Lambda 函数版本。

  • 避免在应用程序配置过程中停机。

  • 处理更新应用程序的复杂性,而没有许多与容易出错的手动部署关联的风险。

该服务会随您的基础设施进行扩展,因此您可以轻松地向一个实例或数千个实例部署。

AWS CodeDeploy 使用各种系统执行配置管理、源代码控制、持续集成持续交付和持续部署。有关更多信息,请参阅产品集成

AWS CodeDeploy 视频简介

此简短视频 (2:10) 介绍 AWS CodeDeploy 如何自动执行到 Amazon EC2 实例的代码部署,从而便于您快速发布新功能,消除部署期间的停机时间,并避免执行易于出错的手动操作。

AWS CodeDeploy 的优势

AWS CodeDeploy 具备下列优势:

  • 服务器和无服务器应用程序。AWS CodeDeploy 既能让您部署服务器上的传统应用程序,又能让您部署用于部署无服务器 AWS Lambda 函数版本的应用程序。

  • 自动部署。AWS CodeDeploy 可完全自动执行跨您的开发环境、测试环境和生产环境部署应用程序的过程。AWS CodeDeploy 随您的基础设施进行扩展,让您能够部署到一个实例或数千个实例。

  • 最大程度减少停机时间。AWS CodeDeploy 可以帮助最大程度地提高应用程序的可用性。在就地部署期间,AWS CodeDeploy 将跨 Amazon EC2 实例执行滚动更新。您可以指定在进行更新时每次进入脱机状态的实例的数量。在蓝/绿部署中,最新应用程序修订将安装到替换实例上,在您选择时,流量会立即路由到这些实例或者在完成新环境测试之后路由。对于两种部署类型,AWS CodeDeploy 将根据您配置的规则跟踪应用程序运行状况。

  • 停止并回滚。出现错误时,您可以自动或手动停止和回滚部署。

  • 集中控制。您可以通过 AWS CodeDeploy 控制台或 AWS CLI 启动并跟踪部署状态。您将收到一份报告,其中列出每个应用程序修订的部署时间及其部署到的 Amazon EC2 实例。

  • 易于采用。AWS CodeDeploy 与平台无关,适用于任何应用程序。您可以轻松重用设置代码。AWS CodeDeploy 还能与您的软件发布过程或持续交付工具链集成。

AWS CodeDeploy 计算平台 概述

AWS CodeDeploy 可以将应用程序部署到两个 计算平台:

  • EC2/本地:描述可以作为 Amazon EC2 云实例和/或本地服务器的物理服务器实例。使用 EC2/本地 计算平台创建的应用程序可以包括可执行文件、配置文件和映像等。

    使用 EC2/本地 计算平台的部署通过使用就地部署或蓝/绿部署类型,管理流量定向到实例的方式。有关更多信息,请参阅 AWS CodeDeploy 部署类型概述

  • AWS Lambda:用于部署包含更新后的 Lambda 函数版本的应用程序。AWS Lambda 管理在由高可用性计算结构构成的无服务器计算环境中的 Lambda 函数。计算资源的所有管理工作均由 AWS Lambda 执行。有关更多信息,请参阅无服务器计算和应用程序。有关 AWS Lambda 和 Lambda 函数的更多信息,请参阅 AWS Lambda

    使用 AWS Lambda 计算平台创建的应用程序可以通过选择金丝雀部署、线性方式或一次性配置,管理部署过程中流量定向到更新后的 Lambda 函数版本的方式。

下表描述 AWS CodeDeploy 组件如何与每个 计算平台 一起使用。

AWS CodeDeploy 组件 EC2/本地 AWS Lambda
部署组 部署一组将要在其上部署新修订的实例。 将 Lambda 函数版本部署到高可用性计算基础设施。
部署 部署一个包括应用程序和 AppSpec 文件的新修订。AppSpec 指定如何将应用程序部署到部署组中的实例。 部署一个包括 AppSpec 文件的新修订。AppSpec 指定要部署哪个 Lambda 函数版本。
部署配置 此设置确定部署速度以及在部署过程中任何时候都必须正常的最小实例数。 此设置确定流量如何转移到更新后的 Lambda 函数版本。
Revision AppSpec 文件和应用程序文件 (例如,可执行文件、配置文件等) 的组合。 AppSpec 文件指定要部署和更新哪些 Lambda 函数。
应用程序 部署组和修订的集合。EC2/本地 应用程序使用 EC2/本地 计算平台。 修订的集合。Lambda 应用程序使用 AWS Lambda 计算平台。

AWS CodeDeploy 部署类型概述

AWS CodeDeploy 提供两种部署类型选项:

  • 就地部署:停止部署组中每个实例上的应用程序,安装最新的应用程序修订版,然后启动和验证应用程序的新版本。您可以使用负载均衡器,以便在部署期间取消注册每个实例,然后在部署完成后让其重新提供服务。只有使用 EC2/本地 计算平台的部署才能使用就地部署。有关就地部署的更多信息,请参阅就地部署概述

    注意

    AWS Lambda 计算平台部署无法使用就地部署类型。

  • 蓝/绿部署:部署的行为取决于使用的计算平台:

    • EC2/本地 计算平台上的蓝/绿部署:部署组中的实例 (原始环境) 将被不同的实例集 (替代环境) 所代替,步骤如下:

      • 系统将为替代环境配置实例。

      • 替代实例上将安装最新的应用程序修订。

      • 对于应用程序测试和系统验证等活动来说,等待时间可选。

      • 替代环境中的实例在 Elastic Load Balancing 负载均衡器中进行注册,使得流量重新路由至这些实例。系统将撤销原始环境中的实例注册,进而终止或因其他使用情形而保持运行。

      注意

      在使用 EC2/本地 计算平台时,蓝/绿部署只能与 Amazon EC2 实例配合使用。

    • AWS Lambda 计算平台上的蓝/绿部署:流量从当前无服务器环境转移到包含更新后的 Lambda 函数版本的环境。您可以指定执行验证测试的 Lambda 函数并选择流量转移方法。所有 AWS Lambda 计算平台部署都是蓝/绿部署。因此,您无需指定部署类型。

    有关蓝/绿部署的更多信息,请参阅蓝/绿部署概述

注意

使用 AWS CodeDeploy 代理,您可以在已登录的实例上执行部署,而无需应用程序、部署组甚至是 AWS 账户。有关信息,请参阅 使用 AWS CodeDeploy 代理验证本地机器上的部署程序包

就地部署概述

下图显示了典型的 AWS CodeDeploy 就地部署流。

注意

AWS Lambda 计算平台部署无法使用就地部署类型。

下面将介绍操作方式:

  1. 首先,在本地开发计算机或类似环境上创建可部署的内容,然后添加application specification file(AppSpec file)。AppSpec file对 AWS CodeDeploy 是唯一的。它定义您希望 AWS CodeDeploy 执行的部署操作。将可部署的内容和 AppSpec file捆绑成一个存档文件,然后将其上传到 Amazon S3 存储桶或 GitHub 存储库。此存档文件称为应用程序修订(或简称修订)。

  2. 接下来,向 AWS CodeDeploy 提供有关您的部署的信息,例如,要从中提取修订的 Amazon S3 存储桶或 GitHub 存储库,以及要将其内容部署到的一组 Amazon EC2 实例。AWS CodeDeploy 将一组 Amazon EC2 实例称为一个部署组。部署组中包含单独标记的 Amazon EC2 实例和/或 Auto Scaling 组中的 Amazon EC2 实例。

    每次您成功上传要部署到部署组的新应用程序修订时,该捆绑就将设置为部署组的目标修订。也就是说,当前设为部署目标的应用程序修订为目标修订。这也是将为自动部署提取的修订。

  3. 接下来,每个实例上的 AWS CodeDeploy 代理将轮询 AWS CodeDeploy,以确定从指定的 Amazon S3 存储桶或 GitHub 存储库中提取的内容和提取时间。

  4. 最后,每个实例上的 AWS CodeDeploy 代理将从指定的 Amazon S3 存储桶或 GitHub 存储库中提取目标修订,并按照 AppSpec file中的说明向实例中部署内容。

AWS CodeDeploy 将保留您的部署的记录,以便您可以获取部署状态、部署配置参数、实例运行状况。

蓝/绿部署概述

在蓝/绿部署中将流量从一组实例 (原始环境) 重新路由到另一组实例 (替换环境),相比就地部署提供了多种优势:

  • 可以提前在新实例上安装和测试应用程序,并通过直接将流量切换到新服务器来将应用程序部署到生产中。

  • 可以更快、更可靠地切换回最近的应用程序版本,因为只要原始实例没有终止,就可以将流量路由回原始实例。而在就地部署中,必须通过重新部署上一个版本的应用程序来回滚版本。

  • 如果您使用 EC2/本地 计算平台,则会为蓝/绿部署预置新实例,并且新实例反映最新的服务器配置。这将帮助您避免在长时间运行的实例上有时出现的问题类型。

  • 如果您使用 AWS Lambda 计算平台,则需要控制流量如何从原始 AWS Lambda 函数版本转移到新的 AWS Lambda 函数版本。

如何配置蓝/绿部署取决于部署使用的计算平台。

AWS Lambda 计算平台上的蓝/绿部署

如果您使用 AWS Lambda 计算平台,则必须选择下列部署配置类型之一,以指定通信如何从原始 AWS Lambda 函数版本转移到新的 AWS Lambda 函数版本:

  • Canary:流量在两次增量中转移。您可以从预定义的金丝雀部署选项中选择,这些选项指定在第一次增量中转移到更新后的 Lambda 函数版本的流量百分比以及以分钟为单位的间隔;然后指定在第二次增量中转移剩余的流量。

  • 线性的:流量使用相等的增量转移,在每次增量之间的分钟数相同。您可以从预定义的线性选项中进行选择,这些选项指定在每次增量中转移的流量百分比以及每次增量之间的分钟数。

  • All-at-once:所有流量均从原始 Lambda 函数一次性地转移到更新后的 Lambda 函数版本。

有关 AWS Lambda 部署配置的更多信息,请参阅AWS Lambda 计算平台的预定义部署配置

EC2/本地计算平台上的蓝/绿部署

注意

必须对 EC2/本地 计算平台上的蓝/绿部署使用 Amazon EC2 实例。蓝/绿部署类型不支持本地实例。

如果您使用 EC2/本地 计算平台,则适用以下规则:

您必须有一个或多个带有标识 Amazon EC2 标签或 Auto Scaling 组的 Amazon EC2 实例。这些实例必须满足这些额外要求:

  • 每个 Amazon EC2 实例必须附加有正确的 IAM 实例配置文件。

  • 必须在每个实例上安装并运行 AWS CodeDeploy 代理。

注意

通常,您还会有一个在原始环境中的实例上运行的应用程序修订,但这对蓝/绿部署来说不是必需的。

当您创建将在蓝/绿部署中使用的部署组时,您可以选择如何指定替换环境:

复制现有 Auto Scaling 组:在蓝/绿部署中,AWS CodeDeploy 将在部署期间自动为替换环境创建实例。使用此选项,AWS CodeDeploy 将使用您指定的 Auto Scaling 组作为替换环境的模板,其中包括相同数量的正在运行的实例和许多其他配置选项。

手动选择实例:您可以使用 Amazon EC2 实例标签和/或 Auto Scaling 组名称指定要计为替换项的实例。如果您选择此选项,则在创建部署前无需指定替换环境的实例。

下面将介绍操作方式:

  1. 您已有将充当原始环境的一些实例或一个 Auto Scaling 组。首次运行蓝/绿部署时,您通常使用已在就地部署中使用的实例。

  2. 在现有 AWS CodeDeploy 应用程序中,创建一个蓝/绿部署,在其中,除了就地部署所需的选项之外,您还要指定以下内容:

    • 在蓝/绿部署过程期间,将流量从您原始环境路由到替换环境的负载均衡器。

    • 立即将流量重新路由到替换环境还是等待您手动路由。

    • 流量路由到替换实例的速率。

    • 被替换的实例是终止还是继续运行。

  3. 您为此部署组创建一个部署,在此期间,将会发生如下情况:

    1. 如果您选择复制 Auto Scaling 组,则将为您的替换环境预置实例。

    2. 您为部署指定的应用程序修订将安装在替换实例上。

    3. 如果您在部署组设置中指定了等待时间,部署将暂停。这是您可以在替换环境中运行测试和验证的时间。如果您未在等待期结束之前手动路由流量,部署将停止。

    4. 替换环境中的实例向 Elastic Load Balancing 负载均衡器注册,流量开始路由到这些实例。

    5. 原始环境中的实例将取消注册,并根据部署组中的规范进行处理,要么终止,要么继续运行。

我们希望听到您的意见和建议

我们欢迎您提供反馈。要与我们联系,请访问 AWS CodeDeploy 论坛

主题