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

1 分钟阅读
0

我的 AWS CodeDeploy 部署超时并返回以下错误:“The deployment timed out while waiting for a status callback.CodeDeploy expects a status callback within one hour after a deployment hook is invoked.”(等待状态回调时部署超时。CodeDeploy 预计在调用部署挂钩后的一小时内进行状态回调。)

简短描述

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

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

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

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

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

解决方法

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

有关说明,请参阅如何从 Amazon CloudWatch Logs 中检索日志数据?

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

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

**注意:**默认情况下,AWS 托管的 CodeDeployFullAccess IAM policy 中不包含 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");
         }

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