本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
EC2/本地计算平台上的部署
本主题提供有关使用 EC2/本地计算平台的 CodeDeploy 部署的组件和工作流程的信息。有关蓝/绿部署的信息,请参阅蓝绿部署概述。
EC2/本地计算平台上的部署组件
下图显示了 EC2/本地计算平台上 CodeDeploy 部署的组件。
![在 EC2/本地计算平台上 CodeDeploy 部署的组件。](images/deployment-components-workflow.png)
EC2/本地计算平台上的部署工作流程
下图显示部署应用程序修订的主要步骤:
![部署应用程序修订版的主要步骤。](images/deployment-process.png)
这些步骤包括:
-
创建应用程序并为其命名,以唯一标识要部署的应用程序修订版和应用程序的计算平台。 CodeDeploy 在部署期间使用此名称来确保它引用了正确的部署组件,例如部署组、部署配置和应用程序修订。有关更多信息,请参阅 使用创建应用程序 CodeDeploy。
-
指定部署类型以及要将应用程序修订部署到的实例,以此来设置部署组。就地部署将使用最新的应用程序修订更新实例。蓝/绿部署向负载均衡器注册部署组的一组替换实例并取消注册原始实例。
可以指定应用于实例的标签和/或 Amazon EC2 Auto Scaling 组名称。
如果您在部署组中指定了一组标签,则会 CodeDeploy 部署到至少应用了其中一个指定标签的实例。如果您指定两个或更多标签组,则仅 CodeDeploy 部署到符合每个标签组标准的实例。有关更多信息,请参阅 Tagging Instances for Deployments。
在所有情况下,都必须将实例配置为在部署中使用(也就是说,它们必须被标记或属于 Amazon EC2 Auto Scaling 组),并且必须安装并运行 CodeDeploy 代理。
我们为您提供一个 AWS CloudFormation 模板,您可以使用该模板快速设置基于亚马逊 Linux 或 Windows 服务器的 Amazon EC2 实例。我们还为您提供独立 CodeDeploy 代理,以便您可以将其安装在亚马逊 Linux、Ubuntu 服务器、红帽企业 Linux (RHEL) 或 Windows 服务器实例上。有关更多信息,请参阅 使用创建部署组 CodeDeploy。
您还可以指定以下选项:
-
Amazon SNS 通知。创建触发器,以便在部署和实例中发生指定的事件(例如,成功或失败事件)时,向 Amazon SNS 主题的订阅者发送通知。有关更多信息,请参阅 Monitoring Deployments with Amazon SNS Event Notifications。
-
基于警报的部署管理。实施 Amazon CloudWatch 警报监控,以便在您的指标超过或低于中设定的阈值时停止部署 CloudWatch。
-
自动部署回滚。配置部署,使之在部署失败或达到警报阈值时自动回滚到已知良好的版本。
-
-
指定部署配置,以指示您的应用程序修订需要同时部署多少个实例,以及说明部署到成功和失败条件。有关更多信息,请参阅 View Deployment Configuration Details。
-
将应用程序修订版上传到 Amazon S3 或 GitHub。除了要部署的文件和要在部署期间运行的任何脚本外,还必须包括应用程序规范文件(AppSpec 文件)。该文件包含部署说明,例如,要将文件复制到的每个实例上的位置,以及运行部署脚本的时间。有关更多信息,请参阅 正在处理的应用程序修订版 CodeDeploy。
-
将应用程序修订部署到部署组。部署组中每个实例上的 CodeDeploy 代理会将您的应用程序修订从 Amazon S3 复制到实例,或者复制 GitHub 到该实例。然后, CodeDeploy 代理解除对修订版的捆绑,并使用该 AppSpec 文件将文件复制到指定位置并执行所有部署脚本。有关更多信息,请参阅 使用创建部署 CodeDeploy。
-
检查部署结果。有关更多信息,请参阅 监控中的部署 CodeDeploy。
-
部署修订。如果您需要修复源内容中的错误,或以不同顺序运行部署脚本,或处理失败的部署,则可能需要重新部署。为此,请将修改后的源内容、所有部署脚本和 AppSpec 文件重新捆绑到新的修订版中,然后将修订版上传到 Amazon S3 存储桶或存储 GitHub 库。然后,使用新修订执行到同一部署组的新部署。有关更多信息,请参阅 使用创建部署 CodeDeploy。
设置实例
您必须先设置实例,然后才能首次部署应用程序修订。如果一个应用程序修订需要三个生产服务器和两个备份服务器,您将启动或使用五个实例。
要手动预配置实例,请执行以下操作:
-
在实例上安装 CodeDeploy 代理。该 CodeDeploy 代理可以安装在亚马逊 Linux、Ubuntu Server、RHEL 和 Windows 服务器实例上。
-
如果您使用标签来识别部署组中的实例,请启用标记。 CodeDeploy 依靠标签来识别实例并将其分组到 CodeDeploy 部署组中。尽管入门教程同时使用了键和值,但是您可以只使用键或值为部署组定义标签。
-
启动附加有 IAM 实例配置文件的 Amazon EC2 实例。IAM 实例配置文件必须在 Amazon EC2 实例启动时附加到该实例, CodeDeploy 代理才能验证该实例的身份。
-
创建服务角色。提供服务访问权限,以便 CodeDeploy 可以扩展您 AWS 账户中的标签。
对于初始部署, AWS CloudFormation 模板会为您完成所有这些操作。它基于亚马逊 Linux 或 Windows 服务器创建和配置新的单个 Amazon EC2 实例,并且已经安装了 CodeDeploy 代理。有关更多信息,请参阅 使用以下实例 CodeDeploy。
注意
对于蓝/绿部署,您可以选择使用已有的替换环境实例,也可以让您在部署过程中 CodeDeploy 配置新实例。
上传应用程序修订
将 AppSpec 文件放在应用程序源内容文件夹结构中的根文件夹下。有关更多信息,请参阅 Application Specification Files。
将应用程序源内容文件夹结构捆绑成存档文件格式,例如 zip、tar 或压缩的 tar。将存档文件(修订版)上传到 Amazon S3 存储桶或 GitHub 存储库。
注意
Windows Server 实例不支持 tar 和压缩的 tar 存档文件格式(.tar 和.tar.gz)。
创建应用程序和部署组
CodeDeploy 部署组根据实例的标签、Amazon EC2 Auto Scaling 组名称或两者来识别一组实例。可以向同一实例部署多个应用程序修订。可以向多个实例部署一个应用程序修订。
例如,可以为三个生产服务器添加标签“Prod”,为两个备份服务器添加标签“Backup”。这两个标签可用于在 CodeDeploy 应用程序中创建两个不同的部署组,从而允许您选择哪一组(或两者)应参与部署。
您可以在部署组中使用多个标签组,将部署限制到一组较少的实例。有关信息,请参阅 Tagging Instances for Deployments。
部署应用程序修订
现在,您可以从 Amazon S3 或 GitHub 部署组部署您的应用程序修订了。您可以使用 CodeDeploy 控制台或创建部署命令。可以指定一些参数(包括修订、部署组和部署配置)来控制部署。
更新 应用程序
您可以对应用程序进行更新,然后使用 CodeDeploy 控制台或调用 create- deployment 命令来推送修订。
停止和失败的部署
您可以使用 CodeDeploy 控制台或停止部署命令来停止部署。当您尝试停止部署时,将发生下面三种情况之一:
-
部署将停止,并且操作将返回成功状态。在这种情况下,没有更多的部署生命周期事件将在已停止部署的部署组上运行。一些文件可能已复制到部署组中的一个或多个实例,并且一些脚本可能已在一个或多个实例上运行。
-
部署将不会立即停止,并且操作将返回挂起状态。在这种情况下,一些部署生命周期事件可能仍在部署组上运行。一些文件可能已复制到部署组中的一个或多个实例,并且一些脚本可能已在一个或多个实例上运行。在挂起的操作完成后,停止部署的后续调用将返回成功状态。
-
部署无法停止,并且操作将返回错误。有关更多信息,请参阅 AWS CodeDeploy API 参考中的ErrorInformation和常见错误。
与停止的部署一样,失败的部署可能导致一些部署生命周期事件已在部署组中的一个或多个实例上运行。要找出部署失败的原因,您可以使用 CodeDeploy 控制台、调用get-deployment-instance命令或分析失败部署的日志文件数据。有关更多信息,请参阅 应用程序修订和日志文件清理 和 查看 CodeDeploy EC2/本地部署的日志数据。
重新部署和部署回滚
CodeDeploy 通过将先前部署的修订版作为新部署重新部署来实现回滚。
您可以对部署组进行配置,使之在满足特定条件(例如部署失败或达到警报监控阈值)时自动回滚部署。您还可以在单个部署中覆盖为部署组指定的回滚设置。
另外,也可以选择通过手动重新部署以前部署的版本回滚失败的部署。
在所有情况下,新的或回滚的部署都分配有自己的部署 ID。您可以在 CodeDeploy 控制台中查看的部署列表显示了哪些部署是自动部署的结果。
有关更多信息,请参阅 使用重新部署和回滚部署 CodeDeploy。