AWS CodeDeploy
User Guide (API Version 2014-10-06)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

AWS CodeDeploy 实例运行状况

AWS CodeDeploy 监控部署组中实例的运行状况。如果运行正常的实例数小于部署期间已为部署组指定的最小运行正常实例数,则部署将失败。例如,如果 85% 的实例必须在部署期间保持运行正常,且部署组包含 10 个实例,则只要一个实例的部署失败,整个部署都将失败。这是因为,当一个实例脱机以安装最新的应用程序版本时,可用的运行正常的实例计数已降至 90%。一个出现故障的实例加上另一个脱机实例意味着只有 80% 的实例运行正常且可用。AWS CodeDeploy 将使整个部署失败。

所需的最小运行正常实例数在部署配置中进行定义。

重要

在蓝/绿部署期间,部署配置和最小运行正常主机值将应用于替换环境中的实例,而不应用于原始环境中的实例。但是,当原始环境中的实例从负载均衡器取消注册时,只要一个原始实例未能成功取消注册,整个环境就将标记为失败。

AWS CodeDeploy 提供了三种具有常用的最小正常运行主机值的默认部署配置:

默认部署配置名称 预定义的最小正常运行主机值
CodeDeployDefault.OneAtATime 99%
CodeDeployDefault.HalfAtATime 50%
CodeDeployDefault.AllAtOnce 0

使用部署配置 中,您将发现有关默认部署配置的更多信息。

您可以在 AWS CodeDeploy 中创建自定义部署配置,以定义您自己的最小正常运行主机值。在使用以下操作时,您可以将这些值定义为整数或百分比:

运行状况

AWS CodeDeploy 为每个实例分配两个运行状况值:修订运行状况实例运行状况

修订运行状况

修订运行状况基于实例上当前安装的应用程序修订。它具有以下状态值:

  • 当前:实例上安装的修订与部署组的上次成功部署的修订匹配。

  • 旧:实例上安装的修订与旧版应用程序匹配。

  • 未知:应用程序修订尚未安装成功到实例上。

实例运行状况

实例运行状况基于针对实例的部署是否成功。它具有以下值:

  • 正常:针对实例的上次部署成功。

  • 不正常:尝试将修订部署到实例失败,或修订尚未部署到实例。

AWS CodeDeploy 使用修订运行状况和实例运行状况按以下顺序计划针对部署组的实例的部署:

  1. “不正常”实例运行状况。

  2. “未知”修订运行状况。

  3. “旧”修订运行状况。

  4. “当前”修订运行状况。

如果整个部署成功,则将更新修订,并更新部署组的运行状况值来反映最新的部署。

  • 具有成功部署的所有当前实例将保持“当前”状态。否则,它们将变为“未知”状态。

  • 具有成功部署的所有“旧”或“未知”实例将变为“当前”状态。否则,它们将保持“旧”或“未知”状态。

  • 所有具有成功部署的正常实例都将保持“正常”状态。否则,它们将变为“不正常”状态。

  • 所有具有成功部署的不正常实例都将变为“正常”状态。否则,它们将保持“不正常”状态。

如果整个部署失败或停止:

  • AWS CodeDeploy 尝试将应用程序修订部署到的每个实例的实例运行状况将设置为“正常”或“不正常”,具体取决于针对该实例的部署尝试是成功还是失败。

  • AWS CodeDeploy 未尝试将应用程序修订部署到的每个实例将保持其当前实例运行状况值。

  • 部署组的修订保持不变。

最小运行正常的实例数和部署数

AWS CodeDeploy 允许您出于以下两大目的为部署指定最小运行正常的实例数:

  • 确定整个部署是成功还是失败。如果应用程序修订已成功部署到至少最小数量的运行正常的实例,则部署将成功。

  • 确定部署期间为允许继续部署而必须运行正常的实例的数量。

您可以实例数或实例总数百分比的形式为部署组指定最小运行正常的实例数。如果您指定百分比,则在部署开始时,AWS CodeDeploy 将转换等量实例的百分比,并对实例数的小数部分取整。

AWS CodeDeploy 将在部署过程中跟踪部署组的实例的运行状况,并使用部署的指定的最小运行正常的实例数来确定是否继续部署。基本原则是,部署绝对不能导致运行正常的实例数低于您指定的最小数量。此规则的一个例外情况是,当部署组最初具有的运行正常的实例数少于指定的最小运行正常的实例数时。在此情况下,部署过程不会进一步减少运行正常的实例数。

注意

AWS CodeDeploy 将尝试部署到部署组中的所有实例,甚至包括当前处于停止状态的实例。在计算正常运行的最小主机数过程中,处于停止状态的实例和出现故障的实例的影响相同。如果由于处于停止状态的实例过多而导致部署失败,要解决这种问题,请重启实例或更改实例的标签,以将它们从部署组排除出去。

AWS CodeDeploy 通过尝试将应用程序修订部署到部署组的不正常实例来开始部署过程。对于每次成功部署,AWS CodeDeploy 会将实例的运行状况更改为“正常”,并将它添加到部署组的运行正常的实例中。随后,AWS CodeDeploy 将比较当前的运行正常的实例数与指定的最小运行正常的实例数。

  • 如果运行正常的实例数小于或等于指定的最小运行正常的实例数,则 AWS CodeDeploy 将取消部署以确保运行正常的实例数不会随着部署的增加而减少。

  • 如果运行正常的实例数比指定的最小运行正常的实例数至少多 1,则 AWS CodeDeploy 会将应用程序修订部署到原始的运行正常的实例组。

如果针对运行正常的实例的部署失败,则 AWS CodeDeploy 会将实例的运行状况更改为“不正常”。当部署进行时,AWS CodeDeploy 将更新当前的运行正常的实例数并将它与指定的最小运行正常的实例数进行比较。如果运行正常的实例数在部署过程中的任何时间点小于指定的最小数量,则 AWS CodeDeploy 将停止部署。此做法可防止下一个部署失败的可能性,并减小运行正常的实例数以使其小于指定的最小数量。

注意

确保您指定的最小运行正常的实例数小于部署组中的实例总数。如果您指定百分比值,请记住此值将取整。否则,当部署开始时,运行正常的实例数将小于或等于指定的最小运行正常的实例数,并且 AWS CodeDeploy 将立即使整个部署失败。

AWS CodeDeploy 还使用指定的最小运行正常的实例数和实际的运行正常的实例数来确定是否以及如何将应用程序修订部署到多个实例。默认情况下,AWS CodeDeploy 会将应用程序修订部署到尽可能多的实例,而没有使运行正常的实例数小于指定的最小运行正常的实例数的风险。例如:

  • 如果您的部署组具有 10 个实例,并且您将最小运行正常的实例数设置为 9,则 AWS CodeDeploy 一次将部署到一个实例。

  • 如果您的部署组具有 10 个实例,并且您将最小运行正常的实例数设置为 0,则 AWS CodeDeploy 将同时部署到每个实例。

示例

以下示例假定一个具有 10 个实例的部署组。

最小运行正常的实例数:95%

AWS CodeDeploy 会将最小运行正常的实例数取整为 10 个实例,这等于运行正常的实例数。如果未将修订部署到任何实例,则整个部署将立即失败。

最小运行正常的实例数:9

AWS CodeDeploy 一次将修订部署到一个实例。如果这些部署中的任一部署失败,则 AWS CodeDeploy 将立即使整个部署失败。此规则的例外情况是,如果最后一个实例失败,部署仍将成功。

最小运行正常的实例数:8

AWS CodeDeploy 一次将修订部署到 2 个实例。如果这些部署中的 2 个部署失败,则 AWS CodeDeploy 将立即使整个部署失败。此规则的例外情况是,如果最后一个实例是第二个失败的实例,则部署仍将成功。

最小运行正常的实例数:0

AWS CodeDeploy 一次性将修订部署到整个部署组。部署组的运行正常的实例数不能小于 0,这样整个部署便不会失败。

最小运行正常的实例数:9

AWS CodeDeploy 首先将修订部署到运行不正常的实例。

  • 如果任何部署失败,运行正常的实例数将等于最小运行正常的实例数,因此整个部署将立即失败。此规则的例外情况是,如果最后一个实例失败,部署仍将成功。

  • 如果任何部署成功,部署组现在将具有 10 个运行正常的实例。AWS CodeDeploy 将继续部署,一次部署到一个实例,直至任一部署失败或整个部署完成。此规则的例外情况是,如果最后一个实例失败,部署仍将成功。