什么是 CodeDeploy?
CodeDeploy 是一项部署服务,可以向 Amazon EC2 实例、本地实例、无服务器 Lambda 函数或 Amazon ECS 服务自动执行应用程序部署。
您可以部署几乎无限种类的应用程序内容,包括:
-
code
-
无服务器 AWS Lambda 函数
-
Web 和配置文件
-
可执行文件
-
软件包
-
脚本
-
多媒体文件
CodeDeploy 可以部署那些在一个服务器上运行并在 Amazon S3 存储桶、GitHub 存储库或 Bitbucket 存储库中存储的应用程序内容。CodeDeploy 还可以部署无服务器 Lambda 函数。您无需更改现有代码即可开始使用 CodeDeploy。
CodeDeploy 能让您更轻松地执行以下操作:
-
快速发布新功能。
-
更新 AWS Lambda 函数版本。
-
避免在应用程序配置过程中停机。
-
处理更新应用程序的复杂性,而没有许多与容易出错的手动部署关联的风险。
该服务会随您的基础设施进行扩展,因此您可以轻松地向一个实例或数千个实例部署。
CodeDeploy 使用各种系统执行配置管理、源代码控制、持续集成、持续交付和持续部署。有关更多信息,请参阅产品集成。
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。
使用 AWS Lambda 计算平台创建的应用程序可以通过选择金丝雀部署、线性方式或一次性配置,管理部署过程中流量定向到更新后的 Lambda 函数版本的方式。
-
Amazon ECS:用于将 Amazon ECS 容器化应用程序部署为替换任务集。CodeDeploy 通过将容器化应用程序的更新版本安装为新的替换任务集来执行蓝/绿部署。CodeDeploy 将原始应用程序或任务集的生产流量重新路由到替换任务集。成功部署后,将会终止原始任务集。有关 Amazon ECS 的更多信息,请参阅 Amazon Elastic Container Service。
下表描述 CodeDeploy 组件如何与每个计算平台一起使用。有关更多信息,请参阅:
CodeDeploy 组件 | EC2/本地 | AWS Lambda | Amazon ECS |
---|---|---|---|
部署组 | 将修订部署到一组实例。 | 将无服务器 Lambda 函数的一个新版本部署到高可用性计算基础设施。 | 指定带有容器化应用程序的 Amazon ECS 服务以部署为任务集,同时指定用于为部署的应用程序提供流量的生产和可选测试侦听器,何时重新路由流量并终止已部署应用程序的原始任务集,以及可选的触发器、警报和回滚设置。 |
部署 | 部署一个包括应用程序和 AppSpec 文件的新修订。AppSpec 指定如何将应用程序部署到部署组中的实例。 | 将生产流量从 Lambda 函数的一个版本转移到同一函数的新版本。AppSpec file指定要部署哪个 Lambda 函数版本。 | 将 Amazon ECS 容器化应用程序的更新版本部署为新的替换任务集。CodeDeploy 将生产流量从具有原始版本的任务集重新路由到具有更新版本的新替换任务集。在部署完成后,会终止原始任务集。 |
部署配置 | 此设置确定部署速度以及在部署过程中任何时候都必须正常的最小实例数。 | 此设置确定流量如何转移到更新后的 Lambda 函数版本。 | 流量始终是一次性转移。无法为 Amazon ECS 部署指定自定义部署配置设置。 |
修订 | AppSpec 文件和应用程序文件 (例如,可执行文件、配置文件等) 的组合。 | 一个 AppSpec 文件,指定要部署的 Lambda 函数以及可在部署生命周期事件挂钩期间运行验证测试的 Lambda 函数。 |
一个 AppSpec file,用于指定以下内容:
|
应用程序 | 部署组和修订的集合。EC2/本地应用程序使用 EC2/本地 计算平台。 | 部署组和修订的集合。用于 AWS Lambda 部署的应用程序使用 Amazon ECS 计算平台。 | 部署组和修订的集合。用于 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 服务中的容器化应用程序的原始版本的任务集转换为同一服务中的替换任务集。指定负载均衡器侦听器的协议和端口用于重新路由生产流量。在部署期间,测试侦听器可以用于在运行验证测试时为替换任务集提供流量。
有关蓝/绿部署的更多信息,请参阅蓝/绿部署概述。
-
注意
利用 CodeDeploy 代理,您可以在已登录的实例上执行部署,而无需应用程序、部署组甚至是 AWS 账户。有关信息,请参阅使用 CodeDeploy 代理验证本地机器上的部署程序包。
就地部署概述
下图显示了典型的 CodeDeploy 就地部署流。
注意
AWS Lambda 和 Amazon ECS 部署无法使用就地部署类型。

下面将介绍操作方式:
-
首先,在本地开发计算机或类似环境上创建可部署的内容,然后添加application specification file(AppSpec file)。AppSpec file对 CodeDeploy 是唯一的。它定义了您希望 CodeDeploy 执行的部署操作。将可部署的内容和 AppSpec file捆绑成一个存档文件,然后将其上传到 Amazon S3 存储桶或 GitHub 存储库。此存档文件称为应用程序修订(简称修订)。
-
接下来,向 CodeDeploy 提供有关您的部署的信息,例如,要从中提取修订的 Amazon S3 存储桶或 GitHub 存储库,以及要将其内容部署到的一组 Amazon EC2 实例。CodeDeploy 将一组 Amazon EC2 实例称为一个部署组。部署组中包含单独标记的 Amazon EC2 实例和/或 Amazon EC2 Auto Scaling 组中的 Amazon EC2 实例。
每次您成功上传要部署到部署组的新应用程序修订时,该捆绑包就会设置为部署组的目标修订。也就是说,当前设为部署目标的应用程序修订为目标修订。这也是为自动部署提取的修订。
-
接下来,每个实例上的 CodeDeploy 代理将轮询 CodeDeploy,以确定从指定的 Amazon S3 存储桶或 GitHub 存储库中提取的内容和提取时间。
-
最后,每个实例上的 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 函数版本。
如何配置蓝/绿部署取决于部署使用的计算平台。
AWS Lambda 计算平台上的蓝/绿部署
如果您使用 AWS Lambda 计算平台,则必须选择下列部署配置类型之一,以指定通信如何从原始 AWS Lambda 函数版本转移到新的 AWS Lambda 函数版本:
-
Canary:流量在两次增量中转移。您可以从预定义的金丝雀部署选项中选择,这些选项指定在第一次增量中转移到更新后的 Lambda 函数版本的流量百分比以及以分钟为单位的间隔;然后指定在第二次增量中转移剩余的流量。
-
线性的:流量使用相等的增量转移,在每次增量之间的分钟数相同。您可以从预定义的线性选项中进行选择,这些选项指定在每次增量中转移的流量百分比以及每次增量之间的分钟数。
-
All-at-once:所有流量均从原始 Lambda 函数一次性地转移到更新后的 Lambda 函数版本。
有关 AWS Lambda 部署配置的更多信息,请参阅AWS Lambda 计算平台的预定义部署配置 。
Amazon ECS 计算平台上的蓝/绿部署
如果您使用的是 Amazon ECS 计算平台,生产流量从您的 Amazon ECS 服务的原始任务集一次性转移到替换任务集。
有关 Amazon ECS 部署配置的更多信息,请参阅 Amazon ECS 计算平台上的部署配置 。
EC2/本地计算平台上的蓝/绿部署
注意
必须对 EC2/本地 计算平台上的蓝/绿部署使用 Amazon EC2 实例。蓝/绿部署类型不支持本地实例。
如果您使用 EC2/本地 计算平台,则适用以下规则:
您必须有一个或多个带有标识 Amazon EC2 标签或 Amazon EC2 Auto Scaling 组的 Amazon EC2 实例。这些实例必须满足这些额外要求:
-
每个 Amazon EC2 实例必须附加有正确的 IAM 实例配置文件。
-
必须在每个实例上安装并运行 CodeDeploy 代理。
注意
通常,您还会有一个在原始环境中的实例上运行的应用程序修订,但这对蓝/绿部署来说不是必需的。
当您创建将在蓝/绿部署中使用的部署组时,您可以选择如何指定替换环境:
复制现有 Amazon EC2 Auto Scaling 组:在蓝/绿部署中,CodeDeploy 将在部署期间为替换环境创建实例。利用此选项,CodeDeploy 将使用您指定的 Amazon EC2 Auto Scaling 组作为替换环境的模板,其中包括相同数量的正在运行的实例和许多其他配置选项。
手动选择实例:您可以使用 Amazon EC2 实例标签和/或 Amazon EC2 Auto Scaling 组名称指定要计为替换项的实例。如果您选择此选项,则在创建部署前无需指定替换环境的实例。
下面将介绍操作方式:
-
您已经有充当原始环境的一些实例或一个 Amazon EC2 Auto Scaling 组。首次运行蓝/绿部署时,您通常使用已在就地部署中使用的实例。
-
在现有 CodeDeploy 应用程序中,创建一个蓝/绿部署,在其中,除了就地部署所需的选项之外,您还要指定以下内容:
-
在蓝/绿部署过程期间,将流量从您原始环境路由到替换环境的负载均衡器。
-
立即将流量重新路由到替换环境还是等待您手动路由。
-
流量路由到替换实例的速率。
-
被替换的实例是终止还是继续运行。
-
-
您为此部署组创建一个部署,在此期间,将会发生如下情况:
-
如果您选择复制 Amazon EC2 Auto Scaling 组,则将为您的替换环境预置实例。
-
您为部署指定的应用程序修订将安装在替换实例上。
-
如果您在部署组设置中指定了等待时间,部署将暂停。这是您可以在替换环境中运行测试和验证的时间。如果您未在等待期结束之前手动路由流量,部署将停止。
-
替换环境中的实例向 Elastic Load Balancing 负载均衡器注册,流量开始路由到这些实例。
-
原始环境中的实例将取消注册,并根据部署组中的规范进行处理,要么终止,要么继续运行。
-
我们希望听到您的意见和建议
我们欢迎您提供反馈。要与我们联系,请访问 CodeDeploy 论坛。
主题