集成 CodeDeploy 带有 Amazon EC2 Auto Scaling - AWS CodeDeploy
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

集成 CodeDeploy 带有 Amazon EC2 Auto Scaling

CodeDeploy 支持 Amazon EC2 Auto Scaling,AN AWS 可启动的服务 Amazon EC2 根据定义的条件自动实例。这些条件可以包括:在指定时间间隔内超过的 CPU 利用率、磁盘读写数或者入站或出站网络流量的限制。Amazon EC2 Auto Scaling 会终止不再需要的实例。有关详细信息,请参阅 什么是 Amazon EC2 Auto Scaling?.

新的 Amazon EC2 实例是作为 Amazon EC2 Auto Scaling 组, CodeDeploy 可以自动部署您对新实例的修订。您还可以协调部署中的 CodeDeploy 带有 Amazon EC2 Auto Scaling 已注册的实例 Elastic Load Balancing 负载平衡器。有关详细信息,请参阅 Integrating CodeDeploy with Elastic Load Balancing设置负载平衡器 Elastic Load Balancing 对于 CodeDeploy Amazon EC2 部署.

注意

请注意,如果您将多个部署组与单个 Amazon EC2 Auto Scaling 组相关联,则可能会遇到问题。例如,如果一个部署失败,则实例将开始关闭,但已在运行的其他部署可能在一个小时后才超时。有关详细信息,请参阅 避免将多个部署组与一个 Amazon EC2 Auto Scaling 组关联在风帽下: CodeDeploy 和 Amazon EC2 Auto Scaling 集成.

部署 CodeDeploy 应用程序至 Amazon EC2 Auto Scaling 组

要部署A CodeDeploy 应用程序修订版 Amazon EC2 Auto Scaling 组:

  1. 创建或查找 IAM 允许 Amazon EC2 Auto Scaling 与工作组合作 Amazon S3.

    注意

    您也可以使用 CodeDeploy 要从Github存储库部署修订,请将 Amazon EC2 Auto Scaling 组。尽管 Amazon EC2 实例仍需要 IAM 实例配置文件,配置文件不需要从Github存储库部署的任何其他权限。有关更多信息,请参阅 步骤 4. 为您的 Amazon EC2 实例.

  2. 创建或使用 Amazon EC2 Auto Scaling 组,指定 IAM 启动配置或模板中的实例配置文件。有关详细信息,请参阅 IAM 对于运行的应用程序的角色 Amazon EC2 实例.

  3. 创建或定位允许的服务角色 CodeDeploy 创建包含 Amazon EC2 Auto Scaling 组。

  4. 创建一个部署组 CodeDeploy,指定 Amazon EC2 Auto Scaling 组名称和服务角色。

  5. 使用 CodeDeploy 将修订部署到包含 Amazon EC2 Auto Scaling 组。

有关更多信息,请参阅 教程: 使用 CodeDeploy 将应用程序部署到 Amazon EC2 Auto Scaling 组.

Amazon EC2 Auto Scaling 行为 CodeDeploy

如何 CodeDeploy 名称 Amazon EC2 Auto Scaling 组

在 EC2/本地 计算平台上进行蓝绿部署期间,您可以通过两个选项将实例添加到替换(绿色)环境:

  • 使用已存在或者您手动创建的实例。

  • 使用来自 Amazon EC2 Auto Scaling 指定用于定义和创建新实例的组 Amazon EC2 Auto Scaling 组。

如果您选择第二个选项, CodeDeploy 规定新的 Amazon EC2 Auto Scaling 您的团体。它使用以下约定来命名组:

CodeDeploy_deployment_group_name_deployment_id

例如,如果ID的部署 10 部署名为 alpha-deployments,配置 Amazon EC2 Auto Scaling 组名为 CodeDeploy_alpha-deployments_10...有关详细信息,请参阅 创建部署组 EC2/本地 蓝色/绿色部署(控制台)GreenFleetProvisioning选项.

自定义生命周期挂钩事件的执行顺序

您可以将自己的生命周期挂钩添加到 Amazon EC2 Auto Scaling 分组 CodeDeploy 部署。但是,这些自定义生命周期挂钩事件相对于 CodeDeploy 默认部署生命周期事件的执行顺序无法预先确定。例如,如果您添加了名为 ReadyForSoftwareInstall 到 Amazon EC2 Auto Scaling 小组,无论是在第一次还是在最后一次之后,您都不能知道它是否会执行, CodeDeploy 默认部署生命周期事件。

了解如何将自定义生命周期挂钩添加到 Amazon EC2 Auto Scaling 组,参见 添加生命周期挂钩.

部署期间的纵向扩展事件

如果在部署过程中发生 Amazon EC2 Auto Scaling 纵向扩展事件,则新实例将使用最近部署的最新应用程序修订进行更新,而不是当前正在部署的应用程序修订。如果部署成功,则旧实例和最近纵向扩展的实例将会托管不同的应用程序修订。

要解决发生的此问题,您可以将更新的应用程序修订重新部署到受影响的部署组。

为避免此问题,我们建议您在执行部署时暂停 Amazon EC2 Auto Scaling 纵向扩展过程。您可以通过用于 负载均衡的 common_functions.sh 脚本中的设置来完成此操作。CodeDeploy. IFIFIF HANDLE_PROCS=true,以下 Amazon EC2 Auto Scaling 在部署过程中会自动暂停事件:

  • AZRebalance

  • AlarmNotification

  • ScheduledActions

  • ReplaceUnhealthy

重要

只有 CodeDeployDefault.OneAtATime 部署配置支持此功能。如果您正在使用其他部署配置,部署组的实例可能仍会应用不同的应用程序修订。

有关使用 HANDLE_PROCS=true 在使用 Amazon EC2 Auto Scaling,参见 关于处理自动扩展流程的重要通知AWS-CODE部署-样品 在Github上。

AWSCloudFormationCFN-Init脚本中的事件顺序

如果您使用 cfn-init (或 cloud-init)要在新调配的Linux实例上运行脚本,您的部署可能会失败,除非您严格控制实例启动后发生的事件顺序。

该顺序必须是:

  1. 新预配的实例启动。

  2. 所有 cfn-init 引导脚本运行直至完成。

  3. TheThethe CodeDeploy 代理开始。

  4. 将最新的应用程序修订部署到实例。

如果没有精心控制事件的顺序,则 CodeDeploy 代理可能会在所有脚本运行完成之前启动部署。

要控制事件的顺序,请使用以下最佳实践之一:

  • 安装 CodeDeploy 代理人 cfn-init 脚本,将其放置在所有其他脚本之后。

  • 包括 CodeDeploy 在自定义AMI中的代理人,并使用 cfn-init 要启动的脚本,将其放置在所有其他脚本之后。

有关使用 cfn-init,参见 CFN-初始化AWS CloudFormation 用户指南.

使用自定义AMI与 CodeDeploy 和 Amazon EC2 Auto Scaling

您有两个选项,用于指定新的AMI在新的 Amazon EC2 实例在 Amazon EC2 Auto Scaling 组:

  • 可以指定已安装 CodeDeploy 代理的自定义的基本 AMI。由于已安装代理,因此相比于另一个选项,此选项启动新 Amazon EC2 实例的速度更快。但是,此选项提供初始部署 Amazon EC2 实例将失败,尤其是 CodeDeploy 代理已过期。如果选择此选项,建议您定期更新自定义的基本 AMI 中的 CodeDeploy 代理。

  • 您可以指定一个不具有 CodeDeploy 已安装代理并且已安装代理,因为每个新实例都在 Amazon EC2 Auto Scaling 组。尽管此选项相比于另一个选项启动新 Amazon EC2 实例的速度更慢,但是它提高了实例的初始部署将成功的可能性。此选项使用最新版本的 CodeDeploy 代理。