

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon ECS のデプロイに関する問題のトラブルシューティング
<a name="troubleshooting-ecs"></a>

**Topics**
+ [置き換えタスクセットを待っている間にタイムアウトが発生します](#troubleshooting-ecs-timeout)
+ [通知が継続されるのを待っている間のタイムアウトの発生](#troubleshooting-ecs-timeout-notif)
+ [IAM ロールに十分なアクセス許可がありません](#troubleshooting-ecs-iam)
+ [ステータスコールバックを待っている間に、デプロイがタイムアウトした](#troubleshooting-ecs-timeout-callback)
+ [1 つ以上のライフサイクルイベントの検証機能が失敗したため、デプロイが失敗しました](#troubleshooting-ecs-lifecycle)
+ [「プライマリタスクセットのターゲットグループはリスナーの後ろにある必要があります」というエラーのため、ELB を更新できませんでした](#troubleshooting-ecs-elb)
+ [Auto Scaling を使用するとデプロイが失敗することがあります](#troubleshooting-ecs-auto-scaling)
+ [ALB のみが段階的なトラフィックルーティングをサポートしているため、デプロイグループの作成/更新時には、代わりに AllAtOnce トラフィックルーティングを使用してください](#troubleshooting-ecs-lb)
+ [デプロイが成功しても、置き換えタスクセットは Elastic Load Balancing のヘルスチェックに失敗し、アプリケーションがダウンしています](#troubleshooting-ecs-task-set-stability)
+ [1 つのデプロイグループに複数のロードバランサーをアタッチできますか?](#troubleshooting-ecs-lb-multi)
+ [ロードバランサーなしで CodeDeploy のブルー/グリーンデプロイを実行できますか?](#troubleshooting-ecs-lb-bg)
+ [デプロイ中に Amazon ECS サービスを新しい情報で更新する方法を教えてください。](#troubleshooting-ecs-exec)

## 置き換えタスクセットを待っている間にタイムアウトが発生します
<a name="troubleshooting-ecs-timeout"></a>

**問題**: CodeDeploy を使用して Amazon ECS アプリケーションをデプロイする際に、次のエラーメッセージが表示される。

`The deployment timed out while waiting for the replacement task set to become healthy. This time out period is 60 minutes.`

**考えられる原因**: このエラーは、タスク定義ファイルまたはその他のデプロイ関連ファイルに誤りがある場合に発生する可能性があります。例えば、タスク定義ファイルの `image` フィールドにタイプミスがあると、Amazon ECS は間違ったコンテナイメージを取得しようとして失敗し続けるため、このエラーが発生します。

**解決方法と次のステップ**:
+ タスク定義ファイルやその他のファイルの入力ミスや設定の問題を修正します。
+ 関連する Amazon ECS サービスイベントをチェックして、置き換えタスクが正常に動作しない理由を調べます。Amazon ECS イベントに関する詳細については、「Amazon Elastic Container Service デベロッパーガイド**」の「[Amazon ECS イベント](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_cwe_events.html)」を参照してください。
+ Amazon Elastic Container Service デベロッパーガイド**の「[Amazon ECS トラブルシューティング](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/troubleshooting.html)」セクションで、イベント内のメッセージに関連するエラーについて参照してください。

## 通知が継続されるのを待っている間のタイムアウトの発生
<a name="troubleshooting-ecs-timeout-notif"></a>

**問題**: CodeDeploy を使用して Amazon ECS アプリケーションをデプロイする際に、次のエラーメッセージが表示される。

 `The deployment timed out while waiting for a notification to continue. This time out period is n minutes.` 

**考えられる原因**: このエラーは、デプロイグループの作成時に **[トラフィックを再ルーティングするタイミングを指定します]** フィールドで待機時間を指定したものの、待機時間が経過する前にデプロイを完了できなかった場合に発生する可能性があります。

**解決方法と次のステップ**:
+ デプロイグループで、**[トラフィックを再ルーティングするタイミングを指定します]** をより長い時間に設定して再デプロイします。詳細については、「[Amazon ECS デプロイ用のデプロイグループを作成する (コンソール)](deployment-groups-create-ecs.md)」を参照してください。
+ デプロイグループで、[**トラフィックを再ルーティングするタイミングを指定します**] を [**すぐにトラフィックを再ルーティング**] に変更して、再デプロイします。詳細については、「[Amazon ECS デプロイ用のデプロイグループを作成する (コンソール)](deployment-groups-create-ecs.md)」を参照してください。
+ 再デプロイし、 `--deployment-wait-type`オプションを に設定して [https://docs.aws.amazon.com/cli/latest/reference/deploy/continue-deployment.html](https://docs.aws.amazon.com/cli/latest/reference/deploy/continue-deployment.html) AWS CLI コマンドを実行します`READY_WAIT`。[**トラフィックを再ルーティングするタイミングを指定します**] で指定した時間が経過する*前に*、このコマンドを必ず実行してください。

## IAM ロールに十分なアクセス許可がありません
<a name="troubleshooting-ecs-iam"></a>

**問題**: CodeDeploy を使用して Amazon ECS アプリケーションをデプロイしている際に、次のエラーメッセージが表示されます。

 `The IAM role role-arn does not give you permission to perform operations in the following AWS service: AWSLambda.` 

**考えられる原因**: このエラーは、[AppSpec ファイルの `Hooks` セクション](reference-appspec-file-structure-hooks.md#appspec-hooks-ecs)で Lambda 関数を指定したが、Lambda サービスに CodeDeploy アクセス許可を付与しなかった場合に発生する可能性があります。

**解決方法**: CodeDeploy サービスロールに `lambda:InvokeFunction` アクセス許可を追加します。このアクセス許可を追加するには、**AWSCodeDeployRoleForECS** か **AWSCodeDeployRoleForECSLimited** の AWSマネージドポリシーのいずれかをロールに追加します。これらのポリシーと、ポリシーを CodeDeploy サービスロールに追加する方法については、「[ステップ 2: CodeDeployのサービスのロールを作成する](getting-started-create-service-role.md)」を参照してください。

## ステータスコールバックを待っている間に、デプロイがタイムアウトした
<a name="troubleshooting-ecs-timeout-callback"></a>

**問題**: CodeDeploy を使用して Amazon ECS アプリケーションをデプロイしている際に、次のエラーメッセージが表示されます。

 `The deployment timed out while waiting for a status callback. CodeDeploy expects a status callback within one hour after a deployment hook is invoked.` 

**考えられる原因**: このエラーは、[AppSpec ファイルの `Hooks` セクション](reference-appspec-file-structure-hooks.md#appspec-hooks-ecs)で Lambda 関数を指定したが、Lambda 関数が CodeDeploy に `Succeeded` または `Failed` ステータスを返すのに必要な `PutLifecycleEventHookExecutionStatus` API を呼び出せなかった場合に発生する可能性があります。

**解決方法と次のステップ:**
+ AppSpec ファイルで指定した Lambda 関数が使用する Lambda 実行ロールに `codedeploy:putlifecycleEventHookExecutionStatus` アクセス許可を追加します。このアクセス許可により、Lambda 関数には CodeDeploy に `Succeeded` または `Failed` のステータスを返すアクセス許可が付与されます。Lambda 実行ロールの詳細については、「AWS Lambda ユーザーガイド**」の「[Lambda 実行ロール](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html)」を参照してください。
+ Lambda 関数のコードと実行ログを確認して、Lambda 関数が CodeDeploy の `PutLifecycleEventHookExecutionStatus` API を呼び出して、ライフサイクル検証テストが `Succeeded` か `Failed` であるかを CodeDeploy に通知していることを確認します。`putlifecycleEventHookExecutionStatus` API の詳細については、「AWS CodeDeploy API リファレンス**」の「[PutLifecycleEventHookExecutionStatus](https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_PutLifecycleEventHookExecutionStatus.html)」を参照してください。Lambda 実行ログの詳細については、「[AWS Lambdaでの Amazon CloudWatch Logs の使用](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-cloudwatchlogs.html)」を参照してください。

## 1 つ以上のライフサイクルイベントの検証機能が失敗したため、デプロイが失敗しました
<a name="troubleshooting-ecs-lifecycle"></a>

**問題**: CodeDeploy を使用して Amazon ECS アプリケーションをデプロイしている際に、次のエラーメッセージが表示されます。

`The deployment failed because one or more of the lifecycle event validation functions failed.`

**考えられる原因**: このエラーは、[AppSpec ファイルの `Hooks` セクション](reference-appspec-file-structure-hooks.md#appspec-hooks-ecs)で Lambda 関数を指定したが、Lambda 関数が `PutLifecycleEventHookExecutionStatus` を呼び出した際に CodeDeploy に `Failed` を返した場合に発生する可能性があります。この失敗は、ライフサイクル検証テストが失敗したことを CodeDeploy に示します。

**考えられる次のステップ**: Lambda 実行ログを確認して、検証テストコードが失敗している理由を確認します。Lambda 実行ログの詳細については、「[AWS Lambdaでの Amazon CloudWatch Logs の使用](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-cloudwatchlogs.html)」を参照してください。

## 「プライマリタスクセットのターゲットグループはリスナーの後ろにある必要があります」というエラーのため、ELB を更新できませんでした
<a name="troubleshooting-ecs-elb"></a>

**問題**: CodeDeploy を使用して Amazon ECS アプリケーションをデプロイしている際に、次のエラーメッセージが表示されます。

`The ELB could not be updated due to the following error: Primary taskset target group must be behind listener`

**考えられる原因**:このエラーは、オプションのテストリスナーを設定しており、そのリスナーに間違ったターゲットグループが設定されている場合に発生する可能性があります。CodeDeploy のテストリスナーの詳細については、「[Amazon ECS デプロイを開始する前に](deployment-steps-ecs.md#deployment-steps-prerequisites-ecs)」と「[Amazon ECS デプロイ中の処理で起こっていること](deployment-steps-ecs.md#deployment-steps-what-happens)」を参照してください。タスクセットの詳細については、「Amazon Elastic Container Service API リファレンス**」の「[TaskSet](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_TaskSet.html)」と、「*AWS CLI コマンドリファレンス*」の「Amazon ECS」セクションの「[describe-task-set](https://docs.aws.amazon.com/cli/latest/reference/ecs/describe-task-set.html)」を参照してください。

**考えられる解決方法**: Elastic Load Balancing の本稼働リスナーとテストリスナーの両方が、現在ワークロードを処理しているターゲットグループを指していることを確認します。確認すべき箇所は 3 つあります。
+ Amazon EC2 のロードバランサーの「**リスナーとルール**」の設定。詳細については、「Application Load Balancer のユーザーガイド**」の「[Application Load Balancer のリスナー](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html)」、または「Network Load Balancer のユーザーガイド**」の「[Network Load Balancer のリスナー](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-listeners.html)」を参照してください。
+ Amazon ECS のクラスター内のサービスの**ネットワーク**設定。詳細については、「Amazon Elastic Container Service デベロッパーガイド**」の「[Application Load Balancerおよび Network Load Balancerの場合](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/load-balancer-types.html#alb-considerations)」を参照してください。
+ CodeDeploy のデプロイグループ設定。詳細については、「[Amazon ECS デプロイ用のデプロイグループを作成する (コンソール)](deployment-groups-create-ecs.md)」を参照してください。

## Auto Scaling を使用するとデプロイが失敗することがあります
<a name="troubleshooting-ecs-auto-scaling"></a>

**問題**: CodeDeploy で Auto Scaling を使用中、デプロイが失敗することがあることに気付きました。この問題の症状の詳細については、「Amazon Elastic Container Service デベロッパーガイド**」の「[サービスの自動スケーリングと ブルー/グリーンデプロイタイプを使用するように設定されたサービスでは、自動スケーリングはデプロイ中にブロックされませんが、状況によってはデプロイが失敗する場合があります](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-type-bluegreen.html#deployment-type-bluegreen-considerations)」というトピックを参照してください。

**考えられる原因**: この問題は、CodeDeploy プロセスと Auto Scaling プロセスが競合する場合に発生する可能性があります。

**解決方法**: `RegisterScalableTarget` API (または対応する`register-scalable-target` AWS CLI コマンド) を使用して CodeDeploy デプロイ中に Auto Scaling プロセスを一時停止および再開します。詳細については、「Application Auto Scaling ユーザーガイド**」の「[Application Auto Scaling のスケーリングの一時停止と再開](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-suspend-resume-scaling.html)」を参照してください。

**注記**  
CodeDeploy は `RegisterScaleableTarget` を直接呼び出すことはできません。この API を使用するには、Amazon Simple Notification Service (または Amazon CloudWatch) に通知またはイベントを送信するように CodeDeploy を設定する必要があります。次に、Lambda 関数を呼び出すように Amazon SNS (または CloudWatch) を設定し、`RegisterScalableTarget` API を呼び出すように Lambda 関数を設定する必要があります。Auto Scaling オペレーションを一時停止するには `SuspendedState` パラメータを`true` に設定し、再開するには `false` に設定し、`RegisterScalableTarget` API を呼び出す必要があります。  
CodeDeploy が送信する通知またはイベントは、デプロイが開始したとき (Auto Scaling の一時停止オペレーションをトリガーする場合)、またはデプロイが成功したとき、失敗したとき、または停止したとき (Auto Scaling 再開オペレーションをトリガーする場合) に発生する必要があります。  
Amazon SNS 通知または CloudWatch イベントを生成するように CodeDeploy を設定する方法については、「[Amazon CloudWatch Events を使用したデプロイのモニタリング](monitoring-cloudwatch-events.md)」と「[Amazon SNS イベント通知を使用したデプロイのモニタリング](monitoring-sns-event-notifications.md)」を参照してください。

## ALB のみが段階的なトラフィックルーティングをサポートしているため、デプロイグループの作成/更新時には、代わりに AllAtOnce トラフィックルーティングを使用してください
<a name="troubleshooting-ecs-lb"></a>

**問題**: CodeDeploy でデプロイグループを作成または更新している際に、次のエラーメッセージが表示されます。

 `Only ALB supports gradual traffic routing, use AllAtOnce Traffic routing instead when you create/update Deployment group.` 

**考えられる原因**: このエラーは Network Load Balancer を使用していて、`CodeDeployDefault.ECSAllAtOnce` 以外の事前定義されたデプロイ設定を使用しようとした場合に発生する可能性があります。

**解決方法:**
+ 事前定義されたデプロイ設定を `CodeDeployDefault.ECSAllAtOnce` に変更します。これは Network Load Balancer がサポートする唯一の事前定義されたデプロイ設定です。

  事前定義されたデプロイ設定の詳細については、「[Amazon ECS コンピューティングプラットフォームの事前定義されたデプロイ設定](deployment-configurations.md#deployment-configurations-predefined-ecs)」を参照してください。
+ ロードバランサーを Application Load Balancer に変更します。Application Load Balancer は、事前定義されたデプロイ設定をすべてサポートします。Application Load Balancer の作成の詳細については、「[CodeDeploy Amazon ECS デプロイ用のロードバランサー、ターゲットグループ、リスナーをセットアップする](deployment-groups-create-load-balancer-for-ecs.md)」を参照してください。

## デプロイが成功しても、置き換えタスクセットは Elastic Load Balancing のヘルスチェックに失敗し、アプリケーションがダウンしています
<a name="troubleshooting-ecs-task-set-stability"></a>

**問題**: CodeDeploy ではデプロイが成功したと表示されているのに、置き換えタスクセットは Elastic Load Balancing からのヘルスチェックに失敗し、アプリケーションがダウンしています。

**考えられる原因**: この問題は、CodeDeploy 一括デプロイを実行した際に、置き換え (グリーン) タスクセットに Elastic Load Balancing ヘルスチェックが失敗する原因となる誤ったコードが含まれている場合に発生する可能性があります。1 回にすべてのデプロイ設定では、トラフィックが置き換えタスクセットに移行した*後* (つまり、CodeDeploy の `AllowTraffic` ライフサイクルイベントが発生した*後*)、ロードバランサーのヘルスチェックが置き換えタスクセットで実行され始めます。そのため、トラフィックが移行した後は置き換えタスクセットでヘルスチェックが失敗しますが、それ以前には失敗しません。CodeDeploy が生成するライフサイクルイベントについては、「[Amazon ECS デプロイ中の処理で起こっていること](deployment-steps-ecs.md#deployment-steps-what-happens)」を参照してください。

**解決方法:**
+ デプロイ設定を 1 回にすべてから canary またはリニアに変更します。canary 設定またはリニア設定では、CodeDeploy が置き換え先環境にアプリケーションをインストールしている間、およびトラフィックが移行される*前* (つまり、`Install` ライフサイクルイベント中および `AllowTraffic` イベント*前*) に、ロードバランサーのヘルスチェックが置き換えタスクセットで実行を開始します。アプリケーションのインストール中、トラフィックが移行する前にチェックを実行できるようにすることで、アプリケーションが一般公開される前に誤ったアプリケーションコードが検出され、デプロイが失敗します。

  canary デプロイまたはリニアデプロイを設定する方法については、「[CodeDeploy を使用して、デプロイグループの設定を変更します。](deployment-groups-edit.md)」を参照してください。

  Amazon ECS のデプロイ中に実行される CodeDeploy ライフサイクルイベントの詳細については、「[Amazon ECS デプロイ中の処理で起こっていること](deployment-steps-ecs.md#deployment-steps-what-happens)」を参照してください。
**注記**  
canary デプロイ設定およびリニアデプロイ設定は、Application Load Balancer でのみサポートされます。
+ 1 回にすべてデプロイ設定を維持したい場合は、テストリスナーをセットアップし、`BeforeAllowTraffic` ライフサイクルフックを使用して置き換えタスクセットのヘルスステータスを確認します。詳細については、「[Amazon ECS のデプロイ向けのライフサイクルイベントフックのリスト](reference-appspec-file-structure-hooks.md#reference-appspec-file-structure-hooks-list-ecs)」を参照してください。

## 1 つのデプロイグループに複数のロードバランサーをアタッチできますか?
<a name="troubleshooting-ecs-lb-multi"></a>

いいえ。複数の Application Load Balancer または Network Load Balancer を使用する場合は、CodeDeploy ブルー/グリーンデプロイの代わりに Amazon ECS ローリング更新を使用してください。ローリング更新の詳細については、「Amazon Elastic Container Service デベロッパーガイド**」の「[ローリング更新](https://docs.aws.amazon.com/AmazonECS/latest/userguide/deployment-type-ecs.html)」を参照してください。Amazon ECS で複数のロードバランサーを使用する方法の詳細については、「Amazon Elastic Container Service デベロッパーガイド**」の「[サービスに複数のターゲットグループを登録する](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/register-multiple-targetgroups.html)」を参照してください。

## ロードバランサーなしで CodeDeploy のブルー/グリーンデプロイを実行できますか?
<a name="troubleshooting-ecs-lb-bg"></a>

いいえ、ロードバランサーなしで CodeDeploy のブルー/グリーンデプロイを実行することはできません。ロードバランサーを使用できない場合は、代わりに Amazon ECS のローリング更新機能を使用してください。Amazon ECS のローリング更新機能の詳細については、「Amazon Elastic Container Service デベロッパーガイド**」の「[ローリング更新](https://docs.aws.amazon.com/AmazonECS/latest/userguide/deployment-type-ecs.html)」を参照してください。

## デプロイ中に Amazon ECS サービスを新しい情報で更新する方法を教えてください。
<a name="troubleshooting-ecs-exec"></a>

CodeDeploy がデプロイの実行中に Amazon ECS サービスを新しいパラメータで更新するようにするには、AppSpec ファイルの `resources` セクションでパラメータを指定します。CodeDeploy でサポートされている Amazon ECS パラメータは、タスク定義ファイルやコンテナ名パラメータなど、ごく一部です。CodeDeploy が更新できる Amazon ECS パラメータの一覧については、「[Amazon ECS デプロイ用の AppSpec の「resources」セクション](reference-appspec-file-structure-resources.md#reference-appspec-file-structure-resources-ecs)」を参照してください。

**注記**  
CodeDeploy でサポートされていないパラメータで Amazon ECS サービスを更新する必要がある場合は、以下のタスクを実行します。  
更新したいパラメータを指定して Amazon ECS の `UpdateService` API を呼び出します。更新できるパラメータの一覧については、「*Amazon Elastic Container Service API リファレンス*」の「[UpdateService](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html)」を参照してください。
変更をタスクに適用するには、新しい Amazon ECS ブルー/グリーンデプロイを作成します。詳細については、「[Amazon ECS コンピューティングプラットフォームのデプロイの作成 (コンソール)](deployments-create-console-ecs.md)」を参照してください。