上次更新时间:2020 年 12 月 28 日
我想解决 AWS CodeDeploy 中的以下错误:“The deployment timed out while waiting for a status callbackCodeDeploy expects a status callback within one hour after a deployment hook is invoked.”(等待状态回调时部署超时。CodeDeploy 预计在调用部署挂钩后的一小时内进行状态回调。)
简短描述通常,您可以在您的 Amazon Elastic Container Service (Amazon ECS) 部署中为多个生命周期事件挂钩(例如 BeforeInstall、AfterInstall、BeforeAllowTraffic和 AfterAllowTraffic)创建 AWS Lambda 验证测试函数。然后,通过验证测试,您预计会得到 Succeeded(成功)或 Failed(失败)响应。
但是,如果您的 AWS Lambda 函数在 60 分钟的默认时间限制内没有返回 CodeDeploy Succeeded(成功)或 Failed(失败)的执行状态,则会收到此错误。
解决方法1.检查 AWS CloudWatch Logs 中的日志数据,以验证 Lambda 函数的执行时间是否超过 60 分钟。
2.将 PutLifecycleEventHookExecutionStatus 权限附加到您的 Lambda 执行角色。例如:
{
"Version": "2012-10-17",
"Statement":
}
注意:PutLifecycleEventHookExecutionStatus 权限默认情况下不包含在 AWS 托管的 CodeDeployFullAcces AWS Identity and Access Management (IAM) 策略中。您必须手动附加策略。
3.验证您的 Lambda 函数是否拥有 putLifecycleEventHookExecutionStatus 方法来返回对 CodeDeploy 的响应。例如:
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");
}