如果部署在等待狀態回呼時逾時,如何解決在 AWS CodeDeploy 中收到的錯誤?

2 分的閱讀內容
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 來部署具有驗證測試的 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"。

**注意:**lifecycle hook AWS Lambda 函數的狀態回呼的預設逾時限制為 60 分鐘。

若要解決錯誤,請確認 lifecycle hook Lambda 函數擁有必要的方法和 AWS Identity and Access Management (IAM) 權限。

解決方法

檢視您的 CloudWatch 日誌以確認錯誤的原因

如需指示,請參閱如何從 Amazon CloudWatch 日誌擷取日誌資料?

確認 lifecycle hook Lambda 函數是否擁有必要的 IAM 權限

確保 lifecycle hook Lambda 函數具有包含下列權限的執行角色PutLifecycleEventHookExecutionStatus

**注意:**根據預設,AWS 受管 CodeDeployFullAccess IAM 政策中不含 PutLifecycleEventHookExecutionStatus 權限。

請參閱下列 PutLifecycleEventHookExecutionStatus 權限陳述式的範例:

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

確認 lifecycle hook Lambda 函數包含必需的方法,可將狀態回應傳回給 CodeDeploy

確保 lifecycle hook Lambda 函數包含 putLifecycleEventHookExecutionStatus 方法。

如需詳細資訊,請參閱《CodeDeploy 使用者指南》中的步驟 3: 建立 lifecycle hook Lambda 函數

請參閱下列 lifecycle hook 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 年前