我的 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 通过验证测试部署 Amazon Elastic Container Service (Amazon ECS) 服务时,可能会出现此问题。
如果测试在调用生命周期事件挂钩后的 60 分钟内未返回成功或失败响应,则 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."
**注意:**生命周期挂钩 AWS Lambda 函数的状态回调的默认超时限制为 60 分钟。
要解决此错误,请验证生命周期挂钩 Lambda 函数是否具有所需的方法和 AWS Identity and Access Management (IAM) 权限。
解决方法
查看您的 CloudWatch 日志,以确认出现此错误的原因
有关说明,请参阅如何从 Amazon CloudWatch Logs 中检索日志数据?
验证生命周期挂钩 Lambda 函数是否具有所需的 IAM 权限
确保生命周期挂钩 Lambda 函数的执行角色包含以下权限: PutLifecycleEventHookExecutionStatus。
**注意:**默认情况下,AWS 托管的 CodeDeployFullAccess 策略中不包含 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");
}