如何解决等待状态回调期间部署超时情况下在 AWS CodeDeploy 中收到的错误?

上次更新日期:2022 年 2 月 9 日

我的 AWS CodeDeploy 部署超时并返回以下错误:“等待状态回调期间部署超时。CodeDeploy 预计在调用部署钩子后的一小时内进行状态回调。” 我该如何排查此问题?

简短描述

当您使用 CodeDeploy 部署具有验证测试的 Amazon Elastic Container Service (Amazon ECS) 服务时,可能会出现此问题。

如果测试在调用生命周期事件钩子后的 60 分钟内未返回成功失败响应,CodeDeploy 将返回以下错误:

“等待状态回调期间部署超时。CodeDeploy 预计在调用部署钩子后的一小时内进行状态回调。”

注意:生命周期钩子 AWS Lambda 函数的状态回调的默认超时限制为 60 分钟。

要解决此错误,请验证生命周期钩子 Lambda 函数是否具有所需的方法以及 AWS Identity and Access Management (IAM) 权限。

解决方法

通过查看您的 CloudWatch Logs 确认引起错误的原因

验证生命周期钩子 Lambda 函数是否具有所需的 IAM 权限

确保生命周期钩子 Lambda 函数具有包含 PutLifecycleEventHookExecutionStatus 权限的执行角色

注意:默认情况下,AWS 托管的 CodeDeployFullAccess IAM 策略中不包含 PutLifecycleEventHookExecutionStatus 权限。

PutLifecycleEventHookExecutionStatus 权限语句示例

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "codedeploy:PutLifecycleEventHookExecutionStatus",
            "Resource": "*"
        }
    ]
}

验证生命周期钩子 Lambda 函数是否包含向 CodeDeploy 返回状态响应所需的方法

确保生命周期钩子 Lambda 函数包含 putLifecycleEventHookExecutionStatus 方法。

有关更多信息,请参阅 CodeDeploy 用户指南中的步骤 3:创建生命周期钩子 Lambda 函数

生命周期钩子 Lambda 函数的 putLifecycleEventHookExecutionStatus 方法的示例

codedeploy.putLifecycleEventHookExecutionStatus(params, function(err, data) {
     if (err) {
          // Validation failed.
          console.log('AfterAllowTestTraffic validation tests failed');
          console.log(err, err.stack);
          callback("CodeDeploy Status update failed");
     } else {
          // Validation succeeded.
          console.log("AfterAllowTestTraffic validation tests succeeded");callback(null, "AfterAllowTestTraffic validation tests succeeded");
         }

这篇文章对您有帮助吗?


您是否需要账单或技术支持?