什么是 CodeDeploy? - AWS CodeDeploy
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

什么是 CodeDeploy?

CodeDeploy 是一种部署服务,可以将应用程序部署自动化 Amazon EC2 实例、本地实例、无服务器 Lambda 功能,或 Amazon ECS 服务。

您可以部署几乎无限种类的应用程序内容,包括:

  • Code

  • 无服务器 AWS Lambda 函数

  • Web 和配置文件

  • 可执行文件

  • 软件包

  • 脚本

  • 多媒体文件

CodeDeploy 可以部署在服务器上运行的应用程序内容,并保存在 Amazon S3 桶、Github存储库或Bitbucket存储库。 CodeDeploy 还可以部署无服务器 Lambda 功能。您无需更改现有代码即可开始使用 CodeDeploy.

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

  • 快速发布新功能。

  • 更新 AWS Lambda 函数版本。

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

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

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

CodeDeploy 与各种配置管理、源控制系统配合使用, 持续集成持续交付以及连续部署。有关详细信息,请参阅 产品集成.

TheThethe CodeDeploy 控制台还提供了一种快速搜索资源的方法,例如存储库、建立项目、部署应用程序和管道。选择 转至资源 或按 / 键,然后键入资源名称。任何匹配结果都会显示在列表中。搜索不区分大小写。您只能看到您有权查看的资源。有关更多信息,请参阅 适用于 的 Identity and Access ManagementAWS CodeDeploy.

视频简介AWS CodeDeploy

本短片(2:10)介绍了如何 CodeDeploy 将代码部署自动化到 Amazon EC2 实例。

的优势AWS CodeDeploy

CodeDeploy 提供下列优势:

  • 服务器、无服务器和容器应用... CodeDeploy 让您在部署无服务器的服务器和应用程序上部署传统应用程序 AWS Lambda 功能版本或 Amazon ECS 应用。

  • 自动部署... CodeDeploy 全面自动化您的开发、测试和生产环境中的应用程序部署。 CodeDeploy 使用基础架构扩展,以便您可以部署到一个实例或数千个。

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

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

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

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

  • 并发部署。. 如果您有多个应用程序使用 EC2/本地 计算平台, CodeDeploy 可以同时将它们部署到同一组实例。

概述 CodeDeploy 计算平台

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

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

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

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

    您可以通过选择 Canary、线性或一次性部署配置,管理部署过程中流量转移到更新后的 Lambda 函数版本的方式。

  • Amazon ECS:用于将 Amazon ECS 容器化应用程序部署为任务集。CodeDeploy 通过将应用程序的更新版本安装为新的替换任务集来执行蓝/绿部署。CodeDeploy 将生产流量从原始应用程序任务集重新传输到替换任务集。成功部署后,将会终止原始任务集。有关 Amazon ECS 的更多信息,请参阅 Amazon Elastic Container Service

    您可以通过选择 Canary、线性或一次性部署配置,管理部署过程中流量转移到更新后的任务集的方式。

    注意

    Amazon ECS 使用蓝色/绿色部署均支持 CodeDeploy 和 AWS CloudFormation. 这些部署的详细信息将在后续章节中介绍。

下表描述了如何 CodeDeploy 各个组件均与每个 计算平台. 有关更多信息,请参阅 。)

CodeDeploy 组件 EC2/本地 AWS Lambda Amazon ECS
部署组 将修订部署到一组实例。 将无服务器 Lambda 函数的一个新版本部署到高可用性计算基础设施。 指定带有容器化应用程序的 Amazon ECS 服务以部署为任务集,同时指定用于为部署的应用程序提供流量的生产和可选测试侦听器,何时重新路由流量并终止已部署应用程序的原始任务集,以及可选的触发器、警报和回滚设置。
Deployment 部署一个包括应用程序和 AppSpec 文件的新修订。AppSpec 指定如何将应用程序部署到部署组中的实例。 将生产流量从 Lambda 函数的一个版本转移到同一函数的新版本。TheThethe AppSpec file 指定 Lambda 要部署的功能版本。 部署更新版本的 Amazon ECS 容器化应用程序作为新的替换任务集。 CodeDeploy 将与原始版本的任务集的生产流量重新分配至带有更新版本的新替换任务集。在部署完成后,会终止原始任务集。
部署配置 此设置确定部署速度以及在部署过程中任何时候都必须正常的最小实例数。 此设置确定流量如何转移到更新后的 Lambda 函数版本。 此设置确定流量如何转移到更新后的 Amazon ECS 任务集。
修订 AppSpec 文件和应用程序文件 (例如,可执行文件、配置文件等) 的组合。 指定哪个AppSpec文件 Lambda 部署和 Lambda 在部署生命周期事件挂钩期间可以运行验证测试的功能。

一个 AppSpec file,用于指定以下内容:

  • TheThethe Amazon ECS 的任务定义 Amazon ECS 使用容器化应用程序进行部署。

  • 部署更新的应用程序的容器。

  • 重新路由生产流量的容器端口。

  • 可选的网络配置设置以及在部署生命周期事件挂钩期间可运行验证测试的 Lambda 函数。

应用程序 部署组和修订的集合。一个 EC2/本地 应用程序使用 EC2/本地 计算平台. 部署组和修订的集合。用于 AWS Lambda 部署的应用程序使用无服务器 。AWS Lambda 计算平台. 部署组和修订的集合。用于 Amazon ECS 部署的应用程序使用 。Amazon ECS 计算平台.

概述 CodeDeploy 部署类型

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

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

    注意

    AWS Lambda 和 Amazon ECS 部署无法使用就地部署类型。

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

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

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

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

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

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

      注意

      如果您使用EC2/本地 计算平台,请注意蓝/绿部署仅适用于 Amazon EC2 实例。

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

    • Amazon ECS 计算平台上的蓝/绿部署:流量从 Amazon ECS 服务中采用原始版本应用程序的任务集转移至同一服务中的替换任务集。您可以通过部署配置将流量转移设置为线性或 Canary。指定负载均衡器侦听器的协议和端口用于重新路由生产流量。在部署期间,测试侦听器可以用于在运行验证测试时为替换任务集提供流量。

    • 通过 AWS CloudFormation 进行蓝/绿部署:作为 AWS CloudFormation 堆栈更新的一部分,流量将从当前资源转移到更新的资源。目前,仅支持 ECS 蓝/绿部署。

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

注意

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

实地部署概述

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

注意

AWS Lambda 和 Amazon ECS 部署无法使用就地部署类型。

下面将介绍操作方式:

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

  2. 接下来,您提供 CodeDeploy 有关您部署的信息,例如 Amazon S3 存储桶或Github存储库,从而将修订版从 Amazon EC2 实例以部署其内容。 CodeDeploy 呼叫一组 Amazon EC2 实例A 部署组. 部署组包含单独标记 Amazon EC2 实例, Amazon EC2 实例 Amazon EC2 Auto Scaling 组,或两者。

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

  3. 接下来, CodeDeploy 每个实例轮询上的代理 CodeDeploy 确定从指定内容中拉出的内容 Amazon S3 桶或Github存储库。

  4. 最后, CodeDeploy 每个实例上的代理都会从 Amazon S3 存储桶或Github存储库,并使用 AppSpec file,将内容部署到实例。

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

蓝色/绿色部署概述

蓝/绿部署用于更新应用程序,同时最大限度地减少因新应用程序版本更改而造成的中断。CodeDeploy 将您的新应用程序版本与旧版本一起配置,然后重新路由您的生产流量。

  • AWS Lambda:流量从一个版本的 Lambda 同一个新版本的功能 Lambda 功能。

  • Amazon ECS:流量从您的 Amazon ECS 对同一个更新后的替换任务的服务 Amazon ECS 服务。

  • EC2/本地:流量从原始环境中的一组实例转移到一组替换实例。

全部 AWS Lambda 和 Amazon ECS 部署为蓝色/绿色。一个 EC2/本地 部署可以实地或蓝色/绿色。蓝/绿部署相对于就地部署有许多优势:

  • 您可以在新的替换环境中安装和测试应用程序,只需通过重新路由流量即可将应用程序部署到生产环境中。

  • 如果您使用的是 EC2/本地 计算平台,切换回最新的应用程序版本将更快、更可靠。这是因为只要原始实例没有被终止,流量就可以路由回原始实例。而在就地部署中,必须通过重新部署上一个版本的应用程序来回滚版本。

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

  • 如果您正在使用 AWS Lambda 计算平台,您可以控制流量从原始位置转移的方式 AWS Lambda 新功能版本 AWS Lambda 功能版本。

  • 如果您使用的是 Amazon ECS 计算平台,则可以控制流量从原始任务集转移到新任务集的方式。

使用 AWS CloudFormation 进行的蓝/绿部署可以使用以下方法之一:

  • AWS CloudFormation 部署模板: 配置部署时 AWS CloudFormation 模板,您的部署是由 AWS CloudFormation 更新。当您更改资源并上传模板更改时,AWS CloudFormation 中的堆栈更新将启动新部署。有关可在 AWS CloudFormation 模板中使用的资源列表,请参阅。AWS CloudFormation 模板 CodeDeploy 参考.

  • 通过 进行蓝/绿部署AWS CloudFormation: 您可以使用 AWS CloudFormation 通过堆栈更新管理蓝色/绿色部署。除了指定流量路由和稳定设置外,您还可以在堆栈模板中定义蓝绿资源。然后,如果您在堆栈更新期间更新所选资源,AWS CloudFormation 会生成所有必要的绿色资源,根据指定的流量路由参数移动流量,并删除蓝色资源。有关详细信息,请参阅 自动化 Amazon ECS 蓝色/绿色部署 CodeDeploy 使用 AWS CloudFormationAWS CloudFormation 用户指南.

    注意

    仅支持 Amazon ECS 蓝/绿部署。

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

AWSLambda计算平台上的蓝色/绿色部署

如果您正在使用 AWS Lambda 计算平台,您必须选择以下部署配置类型之一,以指定流量如何从原始位置移位 AWS Lambda 新功能版本 AWS Lambda 功能版本:

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

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

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

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

亚马逊ECS计算平台上的蓝色/绿色部署

如果您正在使用 Amazon ECS 计算平台,您必须选择以下部署配置类型之一,以指定流量如何从原始位置移位 Amazon ECS 任务设置为新的 Amazon ECS 任务集:

  • Canary:流量在两次增量中转移。您可以从预定义的 Canary 部署选项中选择,这些选项指定在第一次增量中转移到更新后的 Amazon ECS 任务集的流量百分比以及以分钟为单位的间隔;然后指定在第二次增量中转移剩余的流量。

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

  • All-at-once:所有流量都从原始位置移出 Amazon ECS 任务设置为更新 Amazon ECS 任务一次性设置所有。

有关 Amazon ECS 部署配置的更多信息,请参阅 。 计算平台上的部署配置Amazon ECS .

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

注意

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

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

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

  • 每个 Amazon EC2 实例必须有正确的 IAM 已附上实例资料。

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

注意

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

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

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

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

下面将介绍操作方式:

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

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

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

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

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

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

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

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

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

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

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

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

蓝色/绿色部署通过 AWS CloudFormation

您可以管理 CodeDeploy 通过使用 AWS CloudFormation 模板。

当您使用 AWS CloudFormation 模板,您在 AWS CloudFormation 更新任务集。生产流量将从服务的原始任务集转移到替换任务集,可以一次全部转移,也可以使用 Canary 部署进行转移。堆栈更新在 中启动部署。CodeDeploy. 您可以在 CodeDeploy,但您不会以其他方式创建或管理 CodeDeploy 以外的资源 AWS CloudFormation 模板。

注意

用于蓝色/绿色部署 AWS CloudFormation,您不会创建 CodeDeploy 应用程序或部署组。

此方法仅支持 Amazon ECS 蓝/绿部署。有关通过 AWS CloudFormation 进行蓝/绿部署的更多信息,请参阅。通过 Amazon ECS 创建 AWS CloudFormation 蓝/绿部署.

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

我们欢迎您提供反馈!如需联系我们,请访问 TheThethe CodeDeploy 论坛.

主题