什么是 CodeDeploy?
CodeDeploy 是一项部署服务,可以向 Amazon EC2 实例、本地实例、无服务器 Lambda 函数或 Amazon ECS 服务自动执行应用程序部署。
您可以部署几乎无限种类的应用程序内容,包括:
-
代码
-
无服务器 Amazon Lambda 函数
-
Web 和配置文件
-
可执行文件
-
程序包
-
脚本
-
多媒体文件
CodeDeploy 可以部署在服务器上运行并存储在 Amazon S3 存储桶、GitHub 存储库或 Bitbucket 存储库中的应用程序内容。CodeDeploy 还可以部署无服务器 Lambda 函数。您无需更改现有代码即可开始使用 CodeDeploy。
CodeDeploy 能让您更轻松地执行以下操作:
-
快速发布新功能。
-
更新 Amazon Lambda 函数版本。
-
避免在应用程序配置过程中停机。
-
处理更新应用程序的复杂性,而没有许多与容易出错的手动部署关联的风险。
该服务会随您的基础设施进行扩展,因此您可以轻松地向一个实例或数千个实例部署。
CodeDeploy 使用各种系统执行配置管理、源代码控制、持续集成
CodeDeploy 控制台还提供了一种方法,可以快速搜索诸如存储库、构建项目、部署应用程序和管道等资源。选择转到资源或按下 / 键,然后键入资源的名称。任何匹配结果都会显示在列表中。搜索不区分大小写。您只能看到您有权查看的资源。有关更多信息,请参阅 对 Amazon CodeDeploy 进行身份和访问管理。
主题
Amazon CodeDeploy 的优势
CodeDeploy 具备下列优势:
-
服务器、无服务器和容器应用程序。CodeDeploy 既能让您在服务器上部署传统应用程序,也可以部署无服务器 Amazon Lambda 函数版本或 Amazon ECS 应用程序。
-
自动部署。CodeDeploy 可在开发环境、测试环境和生产环境之间实现应用程序部署的完全自动化。CodeDeploy 随您的基础设施进行扩展,让您能够部署到一个实例或数千个实例。
-
最大程度减少停机时间。如果您的应用程序使用 EC2/本地计算平台,则 CodeDeploy 有助于最大限度地提高应用程序的可用性。在就地部署期间,CodeDeploy 将跨 Amazon EC2 实例执行滚动更新。您可以指定在进行更新时每次进入脱机状态的实例的数量。在蓝/绿部署中,最新应用程序修订安装在替换实例上。在您选择时,流量会立即重新路由到这些实例,或者在完成新环境测试之后立即重新路由。对于两种部署类型,CodeDeploy 将根据您配置的规则跟踪应用程序运行状况。
-
停止并回滚。出现错误时,您可以自动或手动停止和回滚部署。
-
集中控制。您可以通过 CodeDeploy 控制台或 Amazon CLI 启动并跟踪部署状态。您将收到一份报告,其中列出每个应用程序修订的部署时间及其部署到的 Amazon EC2 实例。
-
易于采用。CodeDeploy 与平台无关,适用于任何应用程序。您可以轻松地重用设置代码。CodeDeploy 还能与您的软件发布过程或持续交付工具链集成。
-
并发部署。如果您有多个应用程序使用 EC2/本地计算平台,CodeDeploy 可同时将其部署到相同的实例组。
CodeDeploy 计算平台概述
CodeDeploy 可以将应用程序部署到三个计算平台:
EC2/本地:描述可以作为 Amazon EC2 云实例和/或本地服务器的物理服务器实例。使用 EC2/本地计算平台创建的应用程序可以包括可执行文件、配置文件和映像等。
使用 EC2/本地计算平台的部署通过使用就地部署或蓝绿部署类型,管理流量定向到实例的方式。有关更多信息,请参阅 CodeDeploy 部署类型概述。
Amazon Lambda:用于部署由 Lambda 函数的更新版本组成的应用程序。Amazon Lambda 在由高可用性计算结构组成的无服务器计算环境中管理 Lambda 函数。计算资源的所有管理工作均由 Amazon Lambda 执行。有关更多信息,请参阅无服务器计算和应用程序
。有关 Amazon Lambda 和 Lambda 函数的更多信息,请参阅 Amazon Lambda 。 您可以通过选择金丝雀、线性或一次性部署配置,管理部署过程中流量转移到更新后的 Lambda 函数版本的方式。
-
Amazon ECS:用于将 Amazon ECS 容器化应用程序部署为任务集。CodeDeploy 通过安装应用程序的更新版本作为新的替换任务集来执行蓝绿部署。CodeDeploy 将生产流量从原始应用程序任务集重新路由到替换任务集。成功部署后,将会终止原始任务集。有关 Amazon ECS 的更多信息,请参阅 Amazon Elastic Container Service
。 您可以通过选择 Canary、线性或一次性部署配置,管理部署过程中流量转移到更新后的任务集的方式。
注意
支持使用 CodeDeploy 和 Amazon CloudFormation 进行 Amazon ECS 蓝绿部署。这些部署的详细信息将在后续章节中介绍。
下表描述 CodeDeploy 组件如何与每个计算平台一起使用。有关更多信息,请参阅:
| CodeDeploy 组件 | EC2/本地 | Amazon Lambda | Amazon ECS |
|---|---|---|---|
| 部署组 | 将修订部署到一组实例。 | 将无服务器 Lambda 函数的一个新版本部署到高可用性计算基础设施。 | 指定带有容器化应用程序的 Amazon ECS 服务以部署为任务集,同时指定用于为部署的应用程序提供流量的生产和可选测试侦听器,何时重新路由流量并终止已部署应用程序的原始任务集,以及可选的触发器、警报和回滚设置。 |
| 部署 | 部署一个包括应用程序和 AppSpec 文件的新修订。AppSpec 指定如何将应用程序部署到部署组中的实例。 | 将生产流量从 Lambda 函数的一个版本转移到同一函数的新版本。AppSpec 文件指定要部署哪个 Lambda 函数版本。 | 将 Amazon ECS 容器化应用程序的更新版本部署为新的替代任务集。CodeDeploy 将生产流量从具有原始版本的任务集重新路由到具有更新版本的新的替换任务集。在部署完成后,会终止原始任务集。 |
| 部署配置 | 此设置确定部署速度以及在部署过程中任何时候都必须正常的最小实例数。 | 此设置确定流量如何转移到更新后的 Lambda 函数版本。 | 此设置确定流量如何转移到更新后的 Amazon ECS 任务集。 |
| 修订 | AppSpec 文件和应用程序文件(例如,可执行文件、配置文件等)的组合。 | 一个 AppSpec 文件,指定要部署的 Lambda 函数以及可在部署生命周期事件挂钩期间运行验证测试的 Lambda 函数。 |
一个 AppSpec 文件,它指定:
|
| 应用程序 | 部署组和修订的集合。EC2/本地应用程序使用 EC2/本地计算平台。 | 部署组和修订的集合。用于 Amazon Lambda 部署的应用程序使用无服务器 Amazon Lambda 计算平台。 | 部署组和修订的集合。用于 Amazon ECS 部署的应用程序使用 Amazon ECS 计算平台。 |
CodeDeploy 部署类型概述
CodeDeploy 提供两种部署类型选项:
就地部署:停止部署组中每个实例上的应用程序,安装最新的应用程序修订,然后启动和验证应用程序的新版本。您可以使用负载均衡器,以便在部署期间取消注册每个实例,然后在部署完成后让其重新提供服务。只有使用 EC2/本地计算平台的部署才能使用就地部署。有关就地部署的更多信息,请参阅就地部署概述。
注意
Amazon Lambda 和 Amazon ECS 部署不能使用就地部署类型。
蓝绿部署:部署的行为取决于使用的计算平台:
-
EC2/本地计算平台上的蓝绿部署:部署组中的实例(原始环境)将被不同的实例集(替代环境)所代替,步骤如下:
-
为替换环境配置实例。
-
在替换实例上安装最新的应用程序修订。
-
对于应用程序测试和系统验证等活动,可以选择等待时间。
-
替换环境中的实例在一个或多个 Elastic Load Balancing 负载均衡器中注册,从而导致流量被重新路由到这些负载均衡器。原始环境中的实例已注销,可以终止或继续运行以用于其他用途。
注意
如果您使用 EC2/本地计算平台,请注意蓝绿部署仅适用于 Amazon EC2 实例。
-
-
Amazon Lambda 或 Amazon ECS 计算平台上的蓝绿部署:流量根据金丝雀、线性 或一次性 部署配置以增量方式转移。
-
通过 Amazon CloudFormation 进行蓝/绿部署:作为 Amazon CloudFormation 堆栈更新的一部分,流量将从当前资源转移到更新的资源。目前,仅支持 ECS 蓝/绿部署。
有关蓝绿部署的更多信息,请参阅蓝绿部署概述。
-
注意
利用 CodeDeploy 代理,您可以在已登录的实例上执行部署,而无需应用程序、部署组甚至是 Amazon 账户。有关信息,请参阅使用 CodeDeploy 代理验证本地机器上的部署程序包。
就地部署概述
注意
Amazon Lambda 和 Amazon ECS 部署不能使用就地部署类型。
以下是就地部署的工作原理:
-
首先,在本地开发计算机或类似环境上创建可部署的内容,然后添加应用程序规范文件(AppSpec 文件)。AppSpec 文件是 CodeDeploy 所特有的。它定义了您希望 CodeDeploy 执行的部署操作。将可部署的内容和 AppSpec 文件捆绑成一个存档文件,然后将其上传到 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 文件中的说明向实例部署内容。
CodeDeploy 将保留您的部署的记录,以便您可以获取部署状态、部署配置参数、实例运行状况等。
蓝绿部署概述
蓝绿部署用于更新应用程序,同时最大限度地减少因新应用程序版本的更改而造成的中断。在重新路由生产流量之前,CodeDeploy 会将您的新应用程序版本与旧版本一起配置。
-
Amazon Lambda:流量从 Lambda 函数的一个版本转移到同一 Lambda 函数的新版本。
-
Amazon ECS:流量从 Amazon ECS 服务中的任务集转移到同一 Amazon ECS 服务中更新的替换任务集。
-
EC2/本地:流量从原始环境中的一组实例转移到一组替换实例。
所有 Amazon Lambda 和 Amazon ECS 部署均为蓝绿部署。EC2/本地部署可以是就地部署或蓝绿部署。蓝/绿部署相对于就地部署有许多优势:
-
您可以在新的替换环境中安装和测试应用程序,只需通过重新路由流量即可将应用程序部署到生产环境中。
-
如果您使用的是 EC2/本地计算平台,切换回最新的应用程序版本将更快、更可靠。这是因为只要原始实例没有被终止,流量就可以路由回原始实例。而在就地部署中,必须通过重新部署上一个版本的应用程序来回滚版本。
-
如果您使用 EC2/本地计算平台,则会为蓝绿部署预置新实例,并且新实例反映最新的服务器配置。这将帮助您避免在长时间运行的实例上有时出现的问题类型。
-
如果您使用的是 Amazon Lambda 计算平台,则需要控制流量如何从原始 Amazon Lambda 函数版本转移到新的 Amazon Lambda 函数版本。
-
如果您使用的是 Amazon ECS 计算平台,则可以控制流量从原始任务集转移到新任务集的方式。
使用 Amazon CloudFormation 进行的蓝/绿部署可以使用以下方法之一:
-
用于部署的 Amazon CloudFormation 模板:使用 Amazon CloudFormation 模板配置部署时,部署将通过 Amazon CloudFormation 更新触发。当您更改资源并上传模板更改时,Amazon CloudFormation 中的堆栈更新将启动新部署。有关可在 Amazon CloudFormation 模板中使用的资源列表,请参阅CodeDeploy 参考的 Amazon CloudFormation 模板。
-
通过 Amazon CloudFormation 进行蓝/绿部署:您可以使用 Amazon CloudFormation 通过堆栈更新来管理蓝/绿部署。除了指定流量路由和稳定设置外,您还可以在堆栈模板中定义蓝绿资源。然后,如果您在堆栈更新期间更新所选资源,Amazon CloudFormation 会生成所有必要的绿色资源,根据指定的流量路由参数移动流量,并删除蓝色资源。有关更多信息,请参阅《Amazon CloudFormation 用户指南》中的使用 Amazon CloudFormation 通过 CodeDeploy 进行 Amazon ECS 蓝绿部署。
注意
仅支持 Amazon ECS 蓝绿部署。
如何配置蓝/绿部署取决于部署使用的计算平台。
Amazon Lambda 或 Amazon ECS 计算平台上的蓝绿部署
如果您使用的是 Amazon Lambda 或 Amazon ECS 计算平台,则必须说明流量是如何从原始 Amazon Lambda 函数或 Amazon ECS 任务集转移到新函数或任务集的。要指示流量是如何转移的,您必须指定下列部署配置之一:
-
金丝雀
-
线性
-
一次部署全部
有关在金丝雀、线性或一次性部署配置中流量如何转移的信息,请参阅部署配置。
有关 Lambda 部署配置的详细信息,请参阅Amazon Lambda 计算平台上的部署配置。
有关 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 负载均衡器注册,流量开始路由到这些实例。
-
原始环境中的实例将取消注册,并根据部署组中的规范进行处理,要么终止,要么继续运行。
-
通过 Amazon CloudFormation 进行蓝绿部署
您可以通过使用 Amazon CloudFormation 模板对资源进行建模来管理 CodeDeploy 蓝绿部署。
当您使用 Amazon CloudFormation 模板对蓝/绿资源进行建模时,您可以在更新任务集的 Amazon CloudFormation 中创建堆栈更新。生产流量将从服务的原始任务集转移到替换任务集,可以一次全部转移,也可以使用 Canary 部署进行转移。堆栈更新在 CodeDeploy 中启动部署。您可以在 CodeDeploy 中查看部署状态和历史记录,但不会在 Amazon CloudFormation 模板之外创建或管理 CodeDeploy 资源。
注意
对于通过 Amazon CloudFormation 进行的蓝绿部署,您不会创建 CodeDeploy 应用程序或部署组。
此方法仅支持 Amazon ECS 蓝绿部署。有关通过 Amazon CloudFormation 进行蓝/绿部署的更多信息,请参阅通过 Amazon CloudFormation 创建 Amazon ECS 蓝绿部署。
我们希望听到您的意见和建议
我们欢迎您提供反馈。要与我们联系,请访问 CodeDeploy 论坛
主题