问:什么是 AWS CodeDeploy?
AWS CodeDeploy 是一项可以将代码自动部署到任意实例的服务,这些实例包括 Amazon EC2 实例和在内部运行的实例。CodeDeploy 使您能够更轻松地快速推出新功能,避免在部署过程中出现停机,并能帮助您应对应用程序更新时的复杂性。您可以使用 AWS CodeDeploy 自动执行部署,这样不必进行容易出错的手动操作,该服务可以随您的基础设施进行扩展,因此,您可以轻松地部署到一个或上千个实例。

问:哪些人应该使用 AWS CodeDeploy?
AWS CodeDeploy 针对的人群是需要部署应用程序到任意实例的开发人员和管理员,这些实例包括 Amazon EC2 实例和内部运行的实例。它很灵活,任何想在实例上更新软件或运行脚本的人都可以使用。

问:使用 AWS CodeDeploy 可以部署哪些类型的应用程序?
AWS CodeDeploy 可用于部署任何类型的应用程序。要使用 AWS CodeDeploy,您需要指定待复制的文件和要在部署期间在每个实例上运行的脚本。AWS CodeDeploy 与编程语言和架构无关,因此您可以将脚本用于任何定制部署逻辑。

问:AWS CodeDeploy 支持哪些操作系统?
AWS CodeDeploy 支持多种类型的操作系统。AWS CodeDeploy 提供有已在 Amazon Linux、Red Hat Enterprise Linux、Ubuntu Server 和 Microsoft Windows Server 上进行测试的代理程序。如果您想使用其他操作系统,AWS CodeDeploy 代理程序可在此以开源软件形式提供。有关操作系统支持的更多信息,请参阅 AWS CodeDeploy 文档

问:AWS CodeDeploy 能用于我现有的工具链吗?
有。AWS CodeDeploy 可用于各种配置管理系统、持续集成和部署系统以及源代码控制系统。有关更多信息,请参阅产品集成页面。

问:AWS CodeDeploy 与其他的 AWS 部署和管理服务(如 AWS Elastic Beanstalk 和 AWS OpsWorks)有何不同?
AWS CodeDeploy 是一项构建块服务,旨在帮助开发人员部署和更新任意实例中的软件,这些实例包括 Amazon EC2 实例和内部运行的实例。AWS Elastic Beanstalk 和 AWS OpsWorks 是端对端应用程序管理解决方案。

问:AWS CodeDeploy 是否支持内部实例?
是的。AWS CodeDeploy 支持任何实例,只要实例可以安装 CodeDeploy 代理程序并连接到 AWS 公共终端节点

 

问:什么是应用程序?
应用程序是部署到一组实例中的软件和配置的集合。一般情况下,该组中的实例运行同一种软件。例如,如果您有一个大型分布式系统,Web 层可能由一个应用程序组成,数据层可能由另一个应用程序组成。

问:什么是修订版?
修订版是可部署内容某个特定版本,如源代码、构建后项目、网页、可执行文件和部署脚本以及 AppSpec 文件。AWS CodeDeploy 代理程序可通过 GitHub 或 Amazon S3 存储桶访问修订版。

问:什么是部署组?
部署组是与您作为部署对象的应用程序相关的一组实例。您可以通过指定标签、Auto Scaling 组名称或同时指定此二者,将实例添加到部署组中。您可以为一个应用程序定义多个部署组,如模拟和生产。有关标签的更多信息,请参阅 Working with Amazon EC2 Tags in the Console。有关向 Auto Scaling 组进行部署的更多信息,请参阅 Auto Scaling 集成

问:什么是部署配置?
部署配置是一项约束条件,决定一项部署如何通过 实例在部署组中取得进展。您可以使用部署配置向多实例部署组执行零停机部署。例如,如果您的应用程序需要部署组中至少有 50% 的实例在运行中且提供流量,您可以在您的部署配置中指定这一点,从而使部署不会导致停机。如果没有与部署或者部署组相关联的部署配置,则在默认情况下,AWS CodeDeploy 将会一次部署到一个实例中。有关部署配置的更多信息,请参阅实例运行状况

问:我需要为部署指定哪些参数?
您需要为部署指定三种参数:

  1. 修订版 – 指定待部署版本。
  2. 部署组 – 指定部署位置。 
  3. 部署配置 – 指定如何进行部署的可选参数。
问:什么是 AppSpec 文件?
AppSpec 文件是一种配置文件,用于指定待复制文件和待执行脚本。AppSpec 文件使用 YAML 格式,您将其包含在您的修订版的根目录下。AppSpec 文件为 AWS CodeDeploy 代理程序所用,由两个部分组成。文件部分指定了您的修订版中待复制的源文件,以及每个实例的目标文件夹。挂接部分指定了在部署各阶段运行的脚本的位置(作为从修订包根下起始的相对路径)。部署各阶段被称为部署生命周期事件。下面是示例 AppSpec 文件。有关 AppSpec 文件的更多信息,包括所有可指定的选项,请参阅 AppSpec 文件参考

version: 0.0

os: linux

files: 

# You can specify one or more mappings in the files section.

  – source: /

    destination: /var/www/html/WordPress

hooks:

 # The lifecycle hooks sections allows you to specify deployment scripts.

ApplicationStop: 

# Step 1: Stop Apache and MySQL if running.

    – location: helper_scripts/stop_server.sh

BeforeInstall: 

# Step 2: Install Apache and MySQL.

# You can specify one or more scripts per deployment lifecycle event.

    – location: deploy_hooks/puppet-apply-apache.sh

    – location: deploy_hooks/puppet-apply-mysql.sh 

 AfterInstall: 

# Step 3: Set permissions.

    – location: deploy_hooks /change_permissions.sh

      timeout: 30

      runas: root

# Step 4: Start the server.

    – location: helper_scripts/start_server.sh

      timeout: 30

      runas: root

问:什么是部署生命周期事件?
部署会经过一组预定义阶段,称之为部署生命周期事件。部署生命周期事件可让您将代码作为部署的一部分运行。下表以执行顺序列出了目前支持的各种不同的部署生命周期事件,以及您可能想使用它们的时间示例。

部署生命周期事件 说明
ApplicationStop

这是第一个部署生命周期事件,发生在下载完成修订版之前。用于此部署生命周期事件的 AppSpec 文件和脚本来自于上一次成功部署的修订版。 

如果您想从容地停止应用程序或删除部署准备中当前已安装的软件包,您可以使用 ApplicationStop 部署生命周期事件。

DownloadBundle 在此部署生命周期事件期间,代理程序会将修订版文件复制到实例上的临时位置。此部署生命周期事件是为代理程序预留的,不能用于运行用户脚本。
BeforeInstall 您可以使用 BeforeInstall 部署生命周期事件执行预安装任务,如解密文件和创建当前版本的备份。
安装 在此部署生命周期事件期间,代理程序会将修订版文件从临时位置复制到最终目标文件夹中。此部署生命周期事件是为代理程序预留的,不能用于运行用户脚本。
AfterInstall 您可以使用 AfterInstall 部署生命周期事件执行应用程序配置或文件权限更改等任务。
ApplicationStart 您一般使用 ApplicationStart 部署生命周期事件重新启动在 ApplicationStop 期间停止的服务。
ValidateService ValidateService 是最后一个部署生命周期时间,为您提供机会来验证部署已成功完成。

问:如何开始使用 AWS CodeDeploy?
您可以登录 AWS 管理控制台并开始使用 AWS CodeDeploy。如果您要寻找该服务的快速概览,请参阅入门指南,其中包含逐步教程。

问:将现有的 Amazon EC2 实例用于 AWS CodeDeploy 是否有任何先决条件?
Amazon EC2 实例必须与 IAM 实例配置文件相关联,并且应运行一个受支持的操作系统。有关更多信息,请参阅使用现有的 Amazon EC2 实例

问:使用 AWS CodeDeploy 部署应用程序一般要经历哪些步骤??
下图显示了部署期间的典型步骤。创建应用程序和部署组(参阅概念部分了解这些术语的解释)是每个应用程序的典型一次性设置任务。进行循坏操作会上传修订版与部署该版本。有关详细说明,包括每个任务的逐步说明,请参阅部署

问:如何访问 AWS CodeDeploy?
您可以使用 AWS 管理控制台AWS 命令行接口 (AWS CLI)AWS 软件开发工具包AWS CodeDeploy API 访问 AWS CodeDeploy。

问:我需要使用 AWS CodeDeploy 对待部署的代码进行哪些更改?
您不需要对您的代码作任何更改。您只需要在您的修订包根目录下添加一个配置文件(称为 AppSpec 文件),以指定待复制的文件和待执行的脚本。

问:如何使用 AWS CodeDeploy 通过我的源代码控制系统部署应用程序?
如果您使用的是 GitHub,您可以通过 .zip、.tar 或 .tar.gz 格式将修订版从您的存储库直接部署到实例中。对于其他源代码控制系统,您可以以 .zip、.tar 或 .tar.gz 格式捆绑并将修订版上传到 Amazon S3 存储桶中,并在进行部署时指定 Amazon S3 的位置。如果您的应用程序需要构建步骤,请确保 GitHub 存储库或 Amazon S3 存储桶中包含构建后项目。有关将 GitHub 用于 AWS CodeDeploy 的更多信息,请参阅我们的产品集成页面。有关使用 Amazon S3 存储修订版的更多信息,请参阅推送修订版

问:AWS CodeDeploy 如何与我的配置管理工具协作?
您可以从 AppSpec 文件中的任何部署生命周期事件挂接中调用您的配置管理工具。举例来说,如果您有一个想作为部署的一部分运行的 Chef 配方,您可以在 AppSpec 文件的适当部署生命周期事件挂接中指定该配方,以执行此操作。此外,您还可以利用您的配置管理系统在实例上安装 AWS CodeDeploy 代理程序。有关举例说明如何将 AWS CodeDeploy 用于 Chef、Puppet、Ansible 和 Saltstack 的示例,请参阅我们的产品集成页面。

问:能否将 AWS CodeDeploy 用于持续集成和部署系统?
有。您可以通过使用 AWS CLI 或 AWS 软件开发工具包调用公有 API,以将 AWS CodeDeploy 与您的持续集成和部署系统相集成。您可以在我们的产品集成页面找到预建集成和示例。

问:如何将我的应用程序置于刚添加到部署组中的实例上?
将最新版本部署到部署组中,从而将您的应用程序置于新添加的实例上。除了以 Auto Scaling 组的一部分启动的实例之外,AWS CodeDeploy 不会将最新版本自动部署到新添加的 Amazon EC2 实例中。

问:AWS CodeDeploy 如何与 Auto Scaling 协作?
您可以将 Auto Scaling 组与部署组关联在一起,从而确保新启动的实例始终会获得最新版本的应用程序。每当该 Auto Scaling 组有新的 Amazon EC2 实例启动时,它首先将处于待决状态,且该部署组的最后一次成功修订版的部署会在该 Amazon EC2 实例上触发。如果该部署成功完成,Amazon EC2 实例的状态将更改为 InService。如果该部署失败,Amazon EC2 实例终止,新的 Amazon EC2 实例会以待决状态启动,且部署会在新启动的 EC2 实例上触发。有关 Auto Scaling 组实例生命周期事件的更多信息,请参阅 Auto Scaling 组生命周期

问:如何追踪部署的状态?
您可以使用 AWS 管理控制台AWS 命令行接口 (AWS CLI)AWS 软件开发工具包AWS CodeDeploy API 追踪部署的状态。您可以查看部署的总体状态,并进一步深入查看每个实例的状态和该实例的每个部署生命周期事件的状态。您还可以查看任何故障所对应的日志条目,从而轻松调试部署问题,无需登录实例。

问:能否停止运行中的部署?
有。当您停止正在运行的部署时,AWS CodeDeploy 服务将指导每个实例上的代理程序来停止执行其他脚本。要使您的应用程序回到一致状态,您可以重新部署修订版或部署另一个修订版。

问:如何使应用程序回滚到前一修订版?
要使应用程序回滚到前一修订版,您只需要部署该修订版。AWS CodeDeploy 会跟踪记录为当前修订版复制的文件,并在开始新部署前删除这些文件,因此重新部署和回滚之间没有区别。然而,您需要确保前一修订版可用于回滚。

问:我能否使用获得版本控制的 Amazon S3 存储桶存储修订版?
有。您可以使用获得版本控制的 Amazon S3 存储桶并指定版本 ID 唯一地标识修订版。

问:使用 AWS CodeDeploy 时有哪些服务限制?
有关服务限制的信息,请参阅限制。要想提高您的服务限制,请通过 AWS 支持中心提交请求。

问:我能否出于安全分析和运营故障排除的目的获得从我的账户发起的 AWS CodeDeploy API 调用的历史记录?
是。要获得从您的账户发起的 AWS CodeDeploy API 调用的历史记录,您只需在 AWS 管理控制台中打开 AWS CloudTrail 即可。

问:我能否使用 AWS CodeDeploy 将应用程序部署到在 Amazon Virtual Private Cloud (VPC) 内运行的 Amazon EC2 实例中?
可以,但安装在 Amazon EC2 实例上的 AWS CodeDeploy 代理程序必须能够访问公有 AWS CodeDeploy 和 Amazon S3 服务终端节点。有关更多信息,请参阅 AWS CodeDeploy 终端节点Amazon S3 终端节点

问:是否可以使用 AWS Identity and Access Management (IAM) 来管理 AWS CodeDeploy 的访问权限?
有。AWS CodeDeploy 支持资源级权限。您可以为每种 AWS CodeDeploy 资源指定有访问权的用户以及其可执行的操作。例如,您可以设置一项 IAM 策略使用户部署一个特定的应用程序,但只列出其他应用程序的修订版。因此,您可以防止用户对错误的应用程序进行无意更改。有关将 IAM 用于 AWS CodeDeploy 的更多信息,请参阅访问权限参考

问:AWS CodeDeploy 支持哪些区域?
请参阅区域性产品和服务,了解 CodeDeploy 在不同区域的具体提供情况。

问:如何将一个 AWS CodeDeploy 应用程序部署到多个区域?
AWS CodeDeploy 使用位于同一区域的 AWS 资源执行部署。要将一个应用程序部署到多个区域,请在目标区域定义该应用程序,将该应用程序包复制到每个区域中的 Amazon S3 存储桶,然后使用串联或并联转出跨区域开始部署。

问:AWS CodeDeploy 的费用是多少?
通过 AWS CodeDeploy 向 Amazon EC2 实例部署代码不会产生额外收费。使用 AWS CodeDeploy 进行的每个内部实例更新费用为 0.02 USD。有关其他详细信息,请参阅定价页面。