什么是 CodeDeploy? - AWS CodeDeploy

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

什么是 CodeDeploy?

CodeDeploy 是一项部署服务,可自动将应用程序部署到 Amazon EC2 实例、本地实例、无服务器 Lambda 函数或 Amazon ECS 服务。

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

  • 代码

  • 无服务器 AWS Lambda 函数

  • Web 和配置文件

  • 可执行文件

  • 软件包

  • 脚本

  • 多媒体文件

CodeDeploy 可以部署在服务器上运行并存储在 Amazon S3 存储桶、存储库或 Bitbucket GitHub 存储库中的应用程序内容。 CodeDeploy 也可以部署无服务器 Lambda 函数。您无需更改现有代码即可开始使用 CodeDeploy。

CodeDeploy 让你更轻松:

  • 快速发布新功能。

  • 更新 AWS Lambda 函数版本。

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

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

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

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

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

AWS CodeDeploy 的优势

CodeDeploy 提供以下好处:

  • 服务器、无服务器和容器应用程序。 CodeDeploy允许您在服务器上部署传统应用程序,也可以部署无服务器AWS Lambda功能版本或 Amazon ECS 应用程序的应用程序。

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

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

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

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

  • 易于采用。 CodeDeploy 不受平台限制,适用于任何应用程序。您可以轻松地重复使用您的设置代码。 CodeDeploy 还可以与您的软件发布流程或持续交付工具链集成。

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

CodeDeploy 计算平台概述

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

  • EC2/本地:描述物理服务器的实例,这些实例可以是 Amazon EC2 云实例、本地服务器或两者兼而有之。使用 EC2/本地计算平台创建的应用程序可以由可执行文件、配置文件、映像等组成。

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

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

    您可以通过选择金丝雀、线性或 all-at-once 配置来管理部署期间流量转移到更新后的 Lambda 函数版本的方式。

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

    通过选择金丝雀、线性或 all-at-once 配置,您可以管理在部署期间将流量转移到更新的任务集的方式。

    注意

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

下表描述了如何在每个计算平台上使用 CodeDeploy 组件。有关更多信息,请参阅:

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

指定以下 AppSpec 内容的文件:

  • 要部署容器化应用程序的 Amazon ECS 服务的 Amazon ECS 任务定义。

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

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

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

应用程序 部署组和修订的集合。EC2/本地应用程序使用 EC2/本地计算平台。 部署组和修订的集合。用于AWS Lambda部署的应用程序使用无服务器 Lambd AWS a 计算平台。 部署组和修订的集合。用于亚马逊 ECS 部署的应用程序使用亚马逊 ECS 计算平台。

CodeDeploy 部署类型概述

CodeDeploy 提供了两个部署类型选项:

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

    注意

    AWSLambda 和 Amazon ECS 部署不能使用就地部署类型。

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

    • EC2/本地计算平台上的蓝/绿:使用以下步骤,将部署组(原始环境)中的实例替换为另一组实例(替换环境):

      • 实例是为替换环境预配置的。

      • 替换实例上安装了最新的应用程序版本。

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

      • 替换环境中的实例在一个或多个 Elastic Load Balancing 负载均衡器中注册,从而导致流量被重新路由到这些负载均衡器。原始环境中的实例已注销,可以终止或继续运行以用于其他用途。

      注意

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

    • AWS Lambda或 Amazon ECS 计算平台上的蓝/绿:流量根据金丝雀线性all-at-once部署配置以增量移动。

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

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

注意

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

就地部署概述

注意

AWSLambda 和 Amazon ECS 部署不能使用就地部署类型。

以下是就地部署的工作原理:

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

  2. 接下来,您将 CodeDeploy 提供有关您的部署的信息,例如从哪个 Amazon S3 存储桶或 GitHub 存储库提取修订以及将其内容部署到哪组 Amazon EC2 实例。 CodeDeploy 将一组 Amazon EC2 实例称为部署组。部署组包含单独标记的 Amazon EC2 实例、Amazon EC2 Auto Scaling 组中的亚马逊 EC2 实例,或者两者兼而有之。

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

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

  4. 最后,每个实例上的 CodeDeploy 代理从 Amazon S3 存储桶或存储 GitHub 库中提取目标修订版,然后按照 AppSpec 文件中的说明将内容部署到该实例。

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

蓝/绿部署概述

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

  • AWSLambda:流量从 Lambda 函数的一个版本转移到同一 Lambda 函数的新版本。

  • Amazon ECS:流量从您的 Amazon ECS 服务中的任务集转移到同一 Amazon ECS 服务中更新的替换任务集。

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

所有 AWS Lambda 和 Amazon ECS 部署均为蓝/绿。EC2/本地部署可以是就地部署或蓝/绿。蓝/绿部署相对于就地部署有许多优势:

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

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

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

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

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

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

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

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

    注意

    仅支持 Amazon ECS 蓝/绿部署。

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

在AWS Lambda或 Amazon ECS 计算平台上部署蓝/绿

如果您使用的是AWS Lambda或 Amazon ECS 计算平台,则必须说明流量是如何从原始AWS Lambda函数或 Amazon ECS 任务集转移到新函数或任务集的。要指示流量是如何转移的,必须指定以下部署配置之一:

  • 金丝雀

  • 线性

  • all-at-once

有关在金丝雀配置、线性配置或 all-at-once部署配置中流量如何转移的信息,请参阅部署配置

有关 Lambda 部署配置的详细信息,请参阅。AWS Lambda 计算平台上的部署配置

有关 Amazon ECS 部署配置的详细信息,请参阅Amazon ECS 计算平台上的部署配置

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

注意

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

如果您使用的是 EC2/本地计算平台,则适用以下条件:

您必须有一个或多个带有识别亚马逊 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,但不能以其他方式创建或管理AWS CloudFormation模板之外的 CodeDeploy 资源。

注意

对于蓝/绿的部署AWS CloudFormation,您无需创建 CodeDeploy 应用程序或部署组。

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

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

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

主题