ステータスコールバックを待っている間にデプロイがタイムアウトしたときに 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 は、デプロイフックが呼び出されてから 1 時間以内にステータスコールバックがあることを想定しています。)

簡単な説明

この問題は、CodeDeploy を使用して Amazon Elastic Container Service (Amazon ECS) サービスを検証テストでデプロイする場合に発生する可能性があります。

ライフサイクルイベントフックが呼び出されてから 60 分以内にテストが「Succeeded」(成功しました) または「Failed」(失敗しました) というレスポンスを返さない場合、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 は、デプロイフックが呼び出されてから 1 時間以内にステータスコールバックがあることを想定しています」。

**注:**ライフサイクルフック AWS Lambda 関数のステータスコールバックのデフォルトのタイムアウト制限は 60 分です。

このエラーを解決するには、ライフサイクルフック Lambda 関数に必要なメソッドと AWS Identity and Access Management (IAM) の許可があることを確認します。

解決方法

CloudWatch Logs を確認して、エラーの原因を確認する

手順については、「Amazon CloudWatch Logs からログデータを取得するにはどうすればよいですか?」を参照してください。

ライフサイクルフック Lambda 関数に必要な IAM 許可があることを確認する

ライフサイクルフックの Lambda 関数に、PutLifecycleEventHookExecutionStatus という許可を含む実行ロールがあることを確認します。

注: PutLifecycleEventHookExecutionStatus 許可は、AWS マネージド CodeDeployFullAccess IAM ポリシーにデフォルトで含まれていません。

PutLifecycleEventHookExecutionStatus 許可ステートメントの次の例を参照してください。

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

CodeDeploy にステータスレスポンスを返すのに必要なメソッドが、ライフサイクルフック Lambda 関数に含まれていることを確認する

ライフサイクルフックの Lambda 関数に putLifecycleEventHookExecutionStatus メソッドが含まれていることを確認してください。

詳細については、「CodeDeploy ユーザーガイド」の「Step 3: Create a lifecycle hook Lambda function」(ステップ 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年前
コメントはありません

関連するコンテンツ