ステータスコールバックを待っている間にデプロイがタイムアウトしたときに AWS CodeDeploy で表示されるエラーを解決するにはどうすればよいですか?

最終更新日: 2022 年 2 月 9 日

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 を確認して、エラーの原因を確認する

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

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

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

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");
         }

この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?