

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

# 什么是 CodeDeploy？
<a name="welcome"></a>

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

您可以部署几乎无限种类的应用程序内容，包括：
+ 代码
+ 无服务器函数 Amazon Lambda 
+ Web 和配置文件
+ 可执行文件
+ 软件包
+ 脚本
+ 多媒体文件

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

CodeDeploy 让你更轻松：
+ 快速发布新功能。
+ 更新 Amazon Lambda 函数版本。
+ 避免在应用程序配置过程中停机。
+ 处理更新应用程序的复杂性，而没有许多与容易出错的手动部署关联的风险。

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

CodeDeploy 可与各种系统配合使用，用于配置管理、源代码控制、[持续集成](https://www.amazonaws.cn/devops/continuous-integration/)、[持续交付](https://www.amazonaws.cn/devops/continuous-delivery/)和持续部署。有关更多信息，请参阅[产品集成](https://www.amazonaws.cn/codedeploy/product-integrations/)。

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

**Topics**
+ [的好处 Amazon CodeDeploy](#benefits)
+ [CodeDeploy 计算平台概述](#compute-platform)
+ [CodeDeploy 部署类型概述](#welcome-deployment-overview)
+ [我们希望听到您的意见和建议](#welcome-contact-us)
+ [Primary Components](primary-components.md)
+ [Deployments](deployment-steps.md)
+ [Application Specification Files](application-specification-files.md)

## 的好处 Amazon CodeDeploy
<a name="benefits"></a>

CodeDeploy 提供以下好处：
+ **服务器、无服务器和容器应用程序。** CodeDeploy允许您在服务器上部署传统应用程序和部署无服务器 Amazon Lambda 功能版本或 Amazon ECS 应用程序的应用程序。
+ **自动部署**。 CodeDeploy 在开发、测试和生产环境中实现应用程序部署的完全自动化。 CodeDeploy可根据您的基础架构进行扩展，以便您可以部署到一个或数千个实例。
+ **最大程度减少停机时间**。如果您的应用程序使用 EC2/本地计算平台，则 CodeDeploy 有助于最大限度地提高应用程序的可用性。在就地部署期间， CodeDeploy 对 Amazon EC2 实例执行滚动更新。您可以指定在进行更新时每次进入脱机状态的实例的数量。在 blue/green 部署期间，将在替换实例上安装最新的应用程序修订。在您选择时，流量会立即重新路由到这些实例，或者在完成新环境测试之后立即重新路由。对于两种部署类型， CodeDeploy 将根据您配置的规则跟踪应用程序运行状况。
+ **停止并回滚**。出现错误时，您可以自动或手动停止和回滚部署。
+ **集中控制**。您可以通过 CodeDeploy 控制台或启动部署并跟踪部署状态 Amazon CLI。您将收到一份报告，其中列出每个应用程序修订的部署时间及其部署到的 Amazon EC2 实例。
+ **易于采用**。 CodeDeploy 不受平台限制，适用于任何应用程序。您可以轻松地重复使用您的设置代码。 CodeDeploy 还可以与您的软件发布流程或持续交付工具链集成。
+ **并发部署**。如果您有多个使用 EC2/本地计算平台的应用程序，则 CodeDeploy 可以将它们同时部署到同一组实例。



## CodeDeploy 计算平台概述
<a name="compute-platform"></a>

CodeDeploy 能够将应用程序部署到三个计算平台：
+ **EC2/本地**：描述可以作为 Amazon EC2 云实例和/或本地服务器的物理服务器实例。使用 EC2/本地计算平台创建的应用程序可以包括可执行文件、配置文件和映像等。

  使用 EC2/本地计算平台的部署通过使用就地部署或蓝绿部署类型，管理流量定向到实例的方式。有关更多信息，请参阅 [CodeDeploy 部署类型概述](#welcome-deployment-overview)。
+ **Amazon Lambda**：用于部署由 Lambda 函数的更新版本组成的应用程序。 Amazon Lambda 在由高可用性计算结构组成的无服务器计算环境中管理 Lambda 函数。计算资源的所有管理均由执行 Amazon Lambda。有关更多信息，请参阅[无服务器计算和应用程序](https://www.amazonaws.cn/serverless/)。有关 Amazon Lambda 和 Lambda 函数的更多信息，请参阅。[Amazon Lambda](https://www.amazonaws.cn/lambda/)

  您可以通过选择金丝雀、线性或 all-at-once配置来管理部署期间流量转移到更新后的 Lambda 函数版本的方式。
+ **Amazon ECS**：用于将 Amazon ECS 容器化应用程序部署为任务集。 CodeDeploy 通过将应用程序的更新版本安装为新的替换任务集来执行 blue/green 部署。 CodeDeploy 将生产流量从原始应用程序任务集重新路由到替换任务集。成功部署后，将会终止原始任务集。有关 Amazon ECS 的更多信息，请参阅 [Amazon Elastic Container Service](https://www.amazonaws.cn/ecs/)。

  通过选择金丝雀、线性或 all-at-once配置，您可以管理在部署期间将流量转移到更新的任务集的方式。
**注意**  
同时使用 CodeDeploy 和支持 Amazon ECS blue/green 部署 Amazon CloudFormation。这些部署的详细信息将在后续章节中介绍。

下表描述了如何在每个计算平台上使用 CodeDeploy 组件。有关更多信息，请参阅: 
+  [在中使用部署组 CodeDeploy](deployment-groups.md) 
+  [在中处理部署 CodeDeploy](deployments.md) 
+  [在中使用部署配置 CodeDeploy](deployment-configurations.md) 
+  [正在处理的应用程序修订版 CodeDeploy](application-revisions.md) 
+  [在 CodeDeploy 中使用应用程序](applications.md) 


| 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 内容的文件： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/codedeploy/latest/userguide/welcome.html)  | 
| 应用程序 | 部署组和修订的集合。EC2/本地应用程序使用 EC2/本地计算平台。 | 部署组和修订的集合。用于 Amazon Lambda 部署的应用程序使用无服务器 Lambd Amazon a 计算平台。 | 部署组和修订的集合。用于 Amazon ECS 部署的应用程序使用 Amazon ECS 计算平台。 | 

## CodeDeploy 部署类型概述
<a name="welcome-deployment-overview"></a>

CodeDeploy 提供了两个部署类型选项：
+ **就地部署**：停止部署组中每个实例上的应用程序，安装最新的应用程序修订，然后启动和验证应用程序的新版本。您可以使用负载均衡器，以便在部署期间取消注册每个实例，然后在部署完成后让其重新提供服务。只有使用 EC2/本地计算平台的部署才能使用就地部署。有关就地部署的更多信息，请参阅[就地部署概述](#welcome-deployment-overview-in-place)。
**注意**  
Amazon Lambda 和 Amazon ECS 部署不能使用就地部署类型。
+ **蓝绿部署**：部署的行为取决于使用的计算平台：
  + **Blue/green on an EC2/On-本地计算平台**：使用以下步骤将部署组（原始环境）中的实例替换为另一组实例（替换环境）：
    + 为替换环境配置实例。
    + 在替换实例上安装最新的应用程序修订。
    + 对于应用程序测试和系统验证等活动，可以选择等待时间。
    + 替换环境中的实例在一个或多个 Elastic Load Balancing 负载均衡器中注册，从而导致流量被重新路由到这些负载均衡器。原始环境中的实例已注销，可以终止或继续运行以用于其他用途。
**注意**  
如果您使用 EC2/本地计算平台，请注意 blue/green 部署仅适用于 Amazon EC2 实例。
  + 或 ** Amazon Lambda Amazon ECS 计算平台上的蓝/绿**：流量根据**金丝雀**、**线性**或**all-at-once**部署配置逐渐移动。
  + **蓝/绿部署通过 Amazon CloudFormation**：作为 Amazon CloudFormation 堆栈更新的一部分，流量将从您当前的资源转移到更新的资源。当前，仅支持 ECS blue/green 部署。

  有关 blue/green 部署的更多信息，请参阅[blue/green 部署概述](#welcome-deployment-overview-blue-green)。

**注意**  
使用该 CodeDeploy 代理，您无需应用程序、部署组甚至 Amazon 帐户，即可在已登录的实例上执行部署。有关信息，请参阅[使用 CodeDeploy 代理在本地计算机上验证部署包](deployments-local.md)。

**Topics**
+ [就地部署概述](#welcome-deployment-overview-in-place)
+ [blue/green 部署概述](#welcome-deployment-overview-blue-green)

### 就地部署概述
<a name="welcome-deployment-overview-in-place"></a>

**注意**  
Amazon Lambda 和 Amazon ECS 部署不能使用就地部署类型。

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

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

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

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

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

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

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

### blue/green 部署概述
<a name="welcome-deployment-overview-blue-green"></a>

 blue/green 部署用于更新您的应用程序，同时最大限度地减少因更改新应用程序版本而造成的中断。 CodeDeploy 在重新路由生产流量之前，请将新的应用程序版本与旧版本一起配置。
+  **Amazon Lambda**：流量从 Lambda 函数的一个版本转移到同一 Lambda 函数的新版本。
+  **Amazon ECS**：流量从 Amazon ECS 服务中的任务集转移到同一 Amazon ECS 服务中更新的替换任务集。
+  **EC2/本地**：流量从原始环境中的一组实例转移到一组替换实例。

与就地部署相比，所有 Amazon Lambda 和 Amazon ECS blue/green. An EC2/On-Premises deployment can be in-place or blue/green. A blue/green 部署均为部署具有许多优势：
+ 您可以在新的替换环境中安装和测试应用程序，只需通过重新路由流量即可将应用程序部署到生产环境中。
+  如果您使用的是 EC2/本地计算平台，切换回最新的应用程序版本将更快、更可靠。这是因为只要原始实例没有被终止，流量就可以路由回原始实例。而在就地部署中，必须通过重新部署上一个版本的应用程序来回滚版本。
+ 如果您使用的是 EC2/本地计算平台，则会为 blue/green 部署配置新实例，并反映大多数 up-to-date服务器配置。这将帮助您避免在长时间运行的实例上有时出现的问题类型。
+ 如果您使用的是 Amazon Lambda 计算平台，则可以控制流量如何从原始 Lambda 函数版本转移到新 Amazon Lambda Amazon 函数版本。
+ 如果您使用的是 Amazon ECS 计算平台，则可以控制流量从原始任务集转移到新任务集的方式。

使用进行 blue/green 部署 Amazon CloudFormation 可以使用以下方法之一：
+ **Amazon CloudFormation 部署模板**：使用 Amazon CloudFormation 模板配置部署时，您的部署由 Amazon CloudFormation 更新触发。当您更改资源并上传模板更改时，中的堆栈更新 Amazon CloudFormation 会启动新的部署。有关可在 Amazon CloudFormation 模板中使用的资源列表，请参阅[Amazon CloudFormation 模板供 CodeDeploy 参考](reference-cloudformation-templates.md)。
+ **通过 Amazon CloudFormation以下方式进行蓝/绿部署**：您可以使用堆栈更新 Amazon CloudFormation 来管理 blue/green 部署。除了指定流量路由和稳定设置外，您还可以在堆栈模板中定义蓝绿资源。然后，如果您在堆栈更新期间更新所选资源，则 Amazon CloudFormation 会生成所有必要的绿色资源，根据指定的流量路由参数转移流量，然后删除蓝色资源。有关更多信息，请参阅*Amazon CloudFormation 用户指南 Amazon CloudFormation*中的[ CodeDeploy 使用自动 blue/green 部署 Amazon ECS](https://docs.amazonaws.cn/AWSCloudFormation/latest/UserGuide/blue-green.html)。
**注意**  
仅支持 Amazon ECS blue/green 部署。

如何配置 blue/green 部署取决于您的部署使用的计算平台。



#### 在或 Amazon Lambda Amazon ECS 计算平台上部署蓝/绿
<a name="blue-green-lambda-compute-type"></a>

如果您使用的是 Amazon Lambda 或 Amazon ECS 计算平台，则必须说明流量是如何从原始 Amazon Lambda 函数或 Amazon ECS 任务集转移到新函数或任务集的。要指示流量是如何转移的，您必须指定下列部署配置之一：
+ **金丝雀**
+ **线性**
+ **all-at-once**

有关在金丝雀、线性或 all-at-once部署配置中流量如何转移的信息，请参阅[部署配置](primary-components.md#primary-components-deployment-configuration)。

有关 Lambda 部署配置的详细信息，请参阅[Amazon Lambda 计算平台上的部署配置](deployment-configurations.md#deployment-configuration-lambda)。

有关 Amazon ECS 部署配置的详细信息，请参阅[Amazon ECS 计算平台上的部署配置](deployment-configurations.md#deployment-configuration-ecs)。

#### Blue/Green deployment on an EC2/on-本地计算平台
<a name="blue-green-server-compute-type"></a>

**注意**  
您必须使用 Amazon EC2 实例在 EC2/本地计算平台上进行 blue/green 部署。该 blue/green 部署类型不支持本地实例。

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

 您必须拥有一个或多个具备识别 Amazon EC2 标签或 Amazon EC2 Auto Scaling 组的 Amazon EC2 实例。这些实例必须满足这些额外要求：
+ 每个 Amazon EC2 实例都必须附加有正确的 IAM 实例配置文件。
+ 必须在每个实例上安装并运行 CodeDeploy 代理。

**注意**  
通常，您还会在原始环境中的实例上运行应用程序修订，但这不是 blue/green 部署的必要条件。

创建用于部署的部署组时，可以选择如何指定替换环境： blue/green 

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

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

下面将介绍操作方式：

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

1. 在现有 CodeDeploy 应用程序中，您可以创建一个 blue/green 部署组，除了就地部署所需的选项外，您还可以在其中指定以下内容：
   + 一种或多个负载均衡器，用于在 blue/green 部署过程中将流量从原始环境路由到替代环境。
   + 立即将流量重新路由到替换环境还是等待您手动路由。
   + 流量路由到替换实例的速率。
   + 被替换的实例是终止还是继续运行。

1. 您为此部署组创建一个部署，在此期间，将会发生如下情况：

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

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

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

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

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

#### 通过蓝/绿部署 Amazon CloudFormation
<a name="blue-green-cfn-config-type"></a>

您可以使用模板对资源进行建模，从而管理 CodeDeploy 蓝/绿部署。 Amazon CloudFormation 

使用 Amazon CloudFormation 模板对 blue/green 资源进行建模时，可以在中创建堆栈更新 Amazon CloudFormation 以更新您的任务集。生产流量将从服务的原始任务集转移到替换任务集，可以一次全部转移，也可以使用 Canary 部署进行转移。堆栈更新在 CodeDeploy 中启动部署。您可以在中查看部署状态和历史记录 CodeDeploy，但不能以其他方式创建或管理 Amazon CloudFormation 模板之外的 CodeDeploy 资源。

**注意**  
对于通过进行的 blue/green 部署 Amazon CloudFormation，您无需创建 CodeDeploy 应用程序或部署组。

此方法仅支持 Amazon ECS blue/green 部署。有关通过进行 blue/green 部署的更多信息 Amazon CloudFormation，请参阅[通过创建 Amazon ECS blue/green 部署 Amazon CloudFormation](deployments-create-ecs-cfn.md)。

## 我们希望听到您的意见和建议
<a name="welcome-contact-us"></a>

我们欢迎您提供反馈。要与我们联系，请访问 [ CodeDeploy 论坛](https://forums.aws.csdn.net/)。

**主题**
+ [Primary Components](primary-components.md)
+ [Deployments](deployment-steps.md)
+ [Application Specification Files](application-specification-files.md)