使用 AWS CodeDeploy 时,如何验证 EC2 Auto Scaling 生命周期操作是否已完成?

2 分钟阅读
0

我正在将 AWS CodeDeploy 与 Amazon Elastic Compute Cloud (Amazon EC2) Auto Scaling 生命周期挂钩结合使用。但是,生命周期操作未完成,EC2 实例也无法启动。

简短描述

CodeDeploy 使用 Amazon EC2 Auto Scaling 生命周期挂钩以执行部署。由于以下原因,生命周期挂钩可能会影响 EC2 实例生命周期状态的顺序:

  • 引起相关生命周期操作失败的失败部署。
  • 与单个 EC2 自动扩缩组关联的多个部署组超出 CodeDeploy 限制并导致超时。
  • 与被删除的应用程序相关联的剩余生命周期挂钩会导致超时。

解决方法

查看您的自动扩缩组的扩展活动历史记录:

  • EC2 控制台导航窗格中,选择 Auto Scaling 下方的自动扩缩组。在内容窗格中,选择您的自动扩缩组。然后选择 Activity History(活动历史记录)视图。
  • 在 AWS 命令行界面(AWS CLI)中,使用命令 describe-scaling-activities

然后,检查历史记录中的以下问题。

部署失败

以下错误通常表示使用 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 集成

AWS 官方
AWS 官方已更新 2 年前