在将 AWS CodeDeploy 与 Auto Scaling 结合使用时,生命周期操作没有成功完成,并且实例没有启动。如何修复此问题?

AWS CodeDeploy 使用 Auto Scaling 中的生命周期挂钩概念来执行其部署。出于多种原因,此概念可影响实例生命周期状态序列,原因包括:

  • 部署失败
  • 将多个部署组与一个 Auto Scaling 组关联
  • 剩余的生命周期挂钩与已删除的应用程序关联

Amazon EC2 控制台中查看 Auto Scaling 组的扩展历史记录或运行 AWS 命令行界面 (CLI) 命令 describe-scaling-activities (请参阅文档中的示例) 并查看以下内容:

以下错误通常表明部署失败:

Description: Launching a new EC2 instance: i-f362a82e.Status Reason: Instance failed to complete user's Lifecycle Action: Lifecycle Action with token 0fc62a4b-153b-4dba-9bf4-9f233e72a697 was abandoned: Lifecycle Action Completed with ABANDON Result

Cause: At 2016-07-22T16:16:56Z an instance was started in response to a difference between desired and actual capacity, increasing the capacity from 2 to 3.

部署失败也会引起相关的生命周期操作失败。查看 AWS CodeDeploy 控制台来了解您的部署为什么失败。有关如何解决常见部署问题的信息,请参阅排查部署问题

在多个部署组与一个 Auto Scaling 组关联时,通常会出现以下错误:

Description: Launching a new EC2 instance: i-649f40a2.Status Reason: Instance failed to complete user's Lifecycle Action: Lifecycle Action with token 95c60857-3c0a-4a67-8518-6dc18797e421 was abandoned: Heartbeat Timeout

Cause: At 2016-07-23T05:08:35Z an instance was started in response to a difference between desired and actual capacity, increasing the capacity from 1 to 2.

通常,当多个部署同时向 AWS CodeDeploy 代理发送命令时,会超出 AWS CodeDeploy 超时逻辑中的 5 分钟限制。将这些部署整合在一个部署组中,并删除任何不需要的部署组以帮助确保正确删除生命周期挂钩。

如果与具有已删除应用程序的部署组关联的生命周期挂钩仍处于活动状态 (通常因为应用程序在其部署组之前删除),请按照 Auto Scaling 组中的 Amazon EC2 实例启动失败并收到错误“Heartbeat Timeout”中的说明操作。

注意:生命周期挂钩结束时,结果为 ABANDON 或 CONTINUE。

如果实例正在启动,则 CONTINUE 指示您的操作已成功,并且 Auto Scaling 可将实例投入使用。否则,ABANDON 指示您的自定义操作未成功,并且 Auto Scaling 可终止实例。

如果实例正在终止,则 ABANDON 和 CONTINUE 都允许终止实例。不过,ABANDON 将停止任何剩余操作 (例如,其他生命周期挂钩),而 CONTINUE 将允许完成任何其他生命周期挂钩。

AWS CodeDeploy 将生命周期挂钩的默认结果参数设置为 ABANDON,但在成功部署后将此参数设置为 CONTINUE。有关更多信息,请参阅生命周期操作结果put-lifecycle-hook选项一节中的 --default-result (string)。

Auto Scaling, AWS CodeDeploy, 生命周期挂钩, 部署组, 超时, heartbeat timeout, abandon 结果


此页面对您有帮助吗? |

返回 AWS Support 知识中心

需要帮助? 请访问 AWS 支持中心

发布时间:2016 年 8 月 25 日