我正在将 AWS CodeDeploy 与 Amazon Elastic Compute Cloud (Amazon EC2) Auto Scaling 生命周期挂钩结合使用。但是,生命周期操作未完成,EC2 实例也无法启动。
简短描述
CodeDeploy 使用 Amazon EC2 Auto Scaling 生命周期挂钩以执行部署。由于以下原因,生命周期挂钩可能会影响 EC2 实例生命周期状态的顺序:
- 引起相关生命周期操作失败的失败部署。
- 与单个 EC2 自动扩缩组关联的多个部署组超出 CodeDeploy 限制并导致超时。
- 与被删除的应用程序相关联的剩余生命周期挂钩会导致超时。
解决方法
查看您的自动扩缩组的扩展活动历史记录:
然后,检查历史记录中的以下问题。
部署失败
以下错误通常表示使用 CodeDeploy 部署失败:
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.
检查部署详情,找出部署失败的原因。有关更多信息,请参阅对 CodeDeploy 进行故障排除。
多个部署组与一个 EC2 自动扩缩组关联
当多个部署组关联到一个 EC2 自动扩缩组时,通常会出现以下错误:
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.
此错误表示由于 CodeDeploy 中的五分钟限制而导致的超时错误。当多个部署同时向 CodeDeploy 代理发送命令时,可能会发生此超时。
将您的部署整合到单个部署组中。请务必删除不必要的部署组,以防止不必要的生命周期挂钩。有关更多信息,请参阅在 CodeDeploy 中使用部署组。
已删除应用程序中剩余的生命周期挂钩
检查与已删除应用程序的部署组关联的活动生命周期挂钩。在删除应用程序的部署组之前删除应用程序时,可能会出现此问题。
结论是,在自动扩缩组中使用 EC2 实例的生命周期挂钩法启动并接收到错误讯息 "Heartbeat Timeout"。 要理解总结生命周期挂钩时的结果,请查看 Cloudtrail 中的 CompleteLifecycleAction API 调用中的 '--lifecycle-action-result" 参数。
相关信息
将 CodeDeploy 与 Auto Scaling 集成