本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
CodeDeploy 实例运行状况
CodeDeploy 监控部署组中实例的运行状况。如果运行正常的实例数小于部署期间已为部署组指定的最小运行正常实例数,则部署将失败。例如,如果 85% 的实例必须在部署期间保持运行正常,且部署组包含 10 个实例,则只要一个实例的部署失败,整个部署都将失败。这是因为,当一个实例脱机以安装最新的应用程序版本时,可用的运行正常的实例计数已降至 90%。一个出现故障的实例加上另一个脱机实例意味着只有 80% 的实例运行正常且可用。 CodeDeploy 将使整个部署失败。
需要牢记的是,为了使整个部署成功,必须满足以下条件:
-
CodeDeploy 可以部署到部署中的每个实例。
-
到至少一个实例的部署必须成功。也就是说,即使最小正常运行的主机数值为 0,也是到至少一个实例的部署必须成功 (即至少有一个实例必须是正常运行的),才能使整个部署成功。
所需的最小运行正常实例数在部署配置中进行定义。
重要
在蓝/绿部署期间,部署配置和最小运行正常主机值将应用于替换环境中的实例,而不应用于原始环境中的实例。但是,当原始环境中的实例从负载均衡器取消注册时,只要一个原始实例未能成功取消注册,整个环境就将标记为失败。
CodeDeploy 提供了三种具有常用的最小正常运行主机值的默认部署配置:
默认部署配置名称 | 预定义的最小正常运行主机值 |
---|---|
CodeDeployDefault.OneAtAtime | 99% |
CodeDeployDefault.HalfAtAtime | 50% |
CodeDeployDefault.AllAtOnce | 0 |
在 在 CodeDeploy 中使用部署配置 中,您将发现有关默认部署配置的更多信息。
您可以在以下应用程序中创建自定义部署配置: CodeDeploy 以定义您自己的最小运行正常主机值。在使用以下操作时,您可以将这些值定义为整数或百分比:
-
正如
minimum-healthy-hosts
当您使用以下应用程序时:create-deployment-config命令在Amazon CLI. -
正如
Value
中的MinimumHealthyHosts中的数据类型 CodeDeploy API。 -
正如
MinimumHealthyHosts
当您使用以下应用程序时:AWS::CodeDeploy::DeploymentConfig在一个Amazon CloudFormation模板。
运行状况
CodeDeploy 为每个实例分配两个运行状况值:修订运行状况和实例运行状况.
- 修订运行状况
-
修订运行状况基于实例上当前安装的应用程序修订。它具有以下状态值:
-
当前:实例上安装的修订与部署组的上次成功部署的修订匹配。
-
旧:实例上安装的修订与旧版应用程序匹配。
-
未知:应用程序修订尚未安装成功到实例上。
-
- 实例运行状况
-
实例运行状况基于针对实例的部署是否成功。它具有以下值:
-
正常:针对实例的上次部署成功。
-
不正常:尝试将修订部署到实例失败,或修订尚未部署到实例。
-
CodeDeploy 使用修订运行状况和实例运行状况按以下顺序计划针对部署组的实例的部署:
-
“不正常”实例运行状况。
-
“未知”修订运行状况。
-
“旧”修订运行状况。
-
“当前”修订运行状况。
如果整个部署成功,则将更新修订,并更新部署组的运行状况值来反映最新的部署。
-
具有成功部署的所有当前实例将保持“当前”状态。否则,它们将变为“未知”状态。
-
具有成功部署的所有“旧”或“未知”实例将变为“当前”状态。否则,它们将保持“旧”或“未知”状态。
-
所有具有成功部署的正常实例都将保持“正常”状态。否则,它们将变为“不正常”状态。
-
所有具有成功部署的不正常实例都将变为“正常”状态。否则,它们将保持“不正常”状态。
如果整个部署失败或停止:
-
每个实例 CodeDeploy 尝试部署应用程序修订的实例运行状况将设置为 “正常” 或 “不正常”,具体取决于针对该实例的部署尝试是成功还是失败。
-
每个实例 CodeDeploy 未尝试部署应用程序修订将保持当前实例运行状况值。
-
部署组的修订保持不变。
最小运行正常的实例数和部署数
CodeDeploy 允许您出于以下两大目的为部署指定最小运行正常的实例数。
-
确定整个部署是成功还是失败。如果应用程序修订已成功部署到至少最小数量的运行正常的实例,则部署将成功。
-
确定部署期间为允许继续部署而必须运行正常的实例的数量。
您可以实例数或实例总数百分比的形式为部署组指定最小运行正常的实例数。如果您指定百分比,则在部署开始时, CodeDeploy 将百分比转换为等效数量的实例,并对实例数的小数部分取整。
CodeDeploy 将在部署过程中跟踪部署组的实例的运行状况,并使用部署的指定的最小运行正常的实例数来确定是否继续部署。基本原则是,部署绝对不能导致运行正常的实例数低于您指定的最小数量。此规则的一个例外情况是,当部署组最初具有的运行正常的实例数少于指定的最小运行正常的实例数时。在此情况下,部署过程不会进一步减少运行正常的实例数。
注意
CodeDeploy 将尝试部署到部署组中的所有实例,甚至包括当前处于停止状态的实例。在计算正常运行的最小主机数过程中,处于停止状态的实例和出现故障的实例的影响相同。如果由于处于停止状态的实例过多而导致部署失败,要解决这种问题,请重启实例或更改实例的标签,以将它们从部署组排除出去。
CodeDeploy 通过尝试将应用程序修订部署到部署组的不正常实例来开始部署过程。对于每次成功的部署, CodeDeploy 将实例的运行状况更改为 “正常”,并将它添加到部署组的运行正常的实例中。 CodeDeploy 随后,将比较当前的运行正常的实例数与指定的最小运行正常的实例数与指定的最小运行正常的实例数进行比较。
-
如果运行正常的实例数小于或等于指定的最小运行正常的实例数, CodeDeploy 取消部署以确保运行正常的实例数不会随着部署的增加而减少。
-
如果运行正常的实例数比指定的最小运行正常的实例数至少多 1, CodeDeploy 将应用程序修订部署到原始的运行状况良好的实例集。
如果针对运行正常的实例的部署失败, CodeDeploy 会将实例的运行状况更改为 “不正常”。随着部署的进展, CodeDeploy 将更新当前的运行正常的实例数并将它与指定的最小运行正常的实例数进行比较。如果运行正常的实例数在部署过程中的任何时间点小于指定的最小数量, CodeDeploy 停止部署。此做法可防止下一个部署失败的可能性,并减小运行正常的实例数以使其小于指定的最小数量。
注意
确保您指定的最小运行正常的实例数小于部署组中的实例总数。如果您指定百分比值,请记住此值将取整。否则,当部署开始时,运行正常的实例数将小于或等于指定的最小运行正常的实例数,并且 CodeDeploy 将立即使整个部署失败。
CodeDeploy 还使用指定的最小运行正常的实例数和实际的运行正常的实例数来确定是否以及如何将应用程序修订部署到多个实例。默认情况下, CodeDeploy 会将应用程序修订部署到尽可能多的实例,而没有使运行正常的实例数小于指定的最小运行正常的实例数的风险。例如:
-
如果您的部署组具有 10 个实例,并且您将最小运行正常的实例数设置为 9, CodeDeploy 一次将部署到一个实例。
-
如果您的部署组具有 10 个实例,并且您将最小运行正常的实例数设置为 0, CodeDeploy 同时部署到每个实例。
示例
以下示例假定一个具有 10 个实例的部署组。
- 最小运行正常的实例数:95%
-
CodeDeploy 会将最小运行正常的实例数取整为 10 个实例,这等于运行正常的实例数。如果未将修订部署到任何实例,则整个部署将立即失败。
- 最小运行正常的实例数:9
-
CodeDeploy 一次将修订部署到一个实例。如果部署到任何实例失败, CodeDeploy 运行正常的实例数将等于最小运行正常的实例数,因此将立即使整个部署失败。此规则的例外情况是,如果最后一个实例失败,部署仍将成功。
CodeDeploy 将继续部署,一次部署到一个实例,直至任一部署失败或整个部署完成。如果 10 个部署全都成功,则部署组现在将具有 10 个运行正常的实例。
- 最小运行正常的实例数:8
-
CodeDeploy 一次将修订部署到 2 个实例。如果这些部署中的 2 个部署失败 CodeDeploy 立即使整个部署失败。此规则的例外情况是,如果最后一个实例是第二个失败的实例,则部署仍将成功。
- 最小运行正常的实例数:0
-
CodeDeploy 一次性将修订部署到整个部署组。至少一个到实例的部署必须成功,整个部署才能成功。如果 0 个实例正常运行,则部署会失败。这是因为如下要求:为了将整个部署标记为成功,在完成整个部署时,至少有一个实例必须是正常运行的,即使最小运行正常的实例数值为 0。