翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon ECS のデプロイに関する問題のトラブルシューティング
トピック
- 置き換えタスクセットを待っている間にタイムアウトが発生します
- 通知が継続されるのを待っている間のタイムアウトの発生
- IAM ロールに十分なアクセス許可がありません
- ステータスコールバックを待っている間に、デプロイがタイムアウトした
- 1 つ以上のライフサイクルイベントの検証機能が失敗したため、デプロイが失敗しました
- 「プライマリタスクセットのターゲットグループはリスナーの後ろにある必要があります」というエラーのため、ELB を更新できませんでした
- Auto Scaling を使用するとデプロイが失敗することがあります
- ALB のみが段階的なトラフィックルーティングをサポートしており、デプロイグループを作成/更新するときにトラフィック AllAtOnce ルーティングを使用する
- デプロイが成功しても、置き換えタスクセットは Elastic Load Balancing のヘルスチェックに失敗し、アプリケーションがダウンしています
- 1 つのデプロイグループに複数のロードバランサーをアタッチできますか?
- ロードバランサーなしで CodeDeploy ブルー/グリーンデプロイを実行できますか?
- デプロイ中に Amazon ECS サービスを新しい情報で更新する方法を教えてください。
置き換えタスクセットを待っている間にタイムアウトが発生します
問題: を使用して Amazon ECS アプリケーションをデプロイすると、次のエラーメッセージが表示されます CodeDeploy。
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 イベント」を参照してください。
-
Amazon Elastic Container Service デベロッパーガイドの「Amazon ECS トラブルシューティング」セクションで、イベント内のメッセージに関連するエラーについて参照してください。
通知が継続されるのを待っている間のタイムアウトの発生
問題: を使用して Amazon ECS アプリケーションをデプロイすると、次のエラーメッセージが表示されます CodeDeploy。
The deployment timed out while waiting for a notification to continue. This time out
period is
n
minutes.
考えられる原因: このエラーは、デプロイグループの作成時に [トラフィックを再ルーティングするタイミングを指定します] フィールドで待機時間を指定したものの、待機時間が経過する前にデプロイを完了できなかった場合に発生する可能性があります。
解決方法と次のステップ:
-
デプロイグループで、[トラフィックを再ルーティングするタイミングを指定します] をより長い時間に設定して再デプロイします。詳細については、「 Amazon ECS デプロイ用のデプロイグループを作成する (コンソール)」を参照してください。
-
デプロイグループで、[トラフィックを再ルーティングするタイミングを指定します] を [すぐにトラフィックを再ルーティング] に変更して、再デプロイします。詳細については、「 Amazon ECS デプロイ用のデプロイグループを作成する (コンソール)」を参照してください。
-
--deployment-wait-type
オプションを に設定して、aws deploy continue-deployment
AWS CLI コマンドを再デプロイしてから実行しますREADY_WAIT
。[トラフィックを再ルーティングするタイミングを指定します] で指定した時間が経過する前に、このコマンドを必ず実行してください。
IAM ロールに十分なアクセス許可がありません
問題: を使用して Amazon ECS アプリケーションをデプロイすると、次のエラーメッセージが表示されます CodeDeploy。
The IAM role
role-arn
does not give you permission to
perform operations in the following AWS service: AWSLambda.
考えられる原因: このエラーは、AppSpec ファイルのHooksセクション で Lambda 関数を指定しても、Lambda サービスにアクセス CodeDeploy 許可を付与しなかった場合に発生する可能性があります。
解決方法: CodeDeploy サービスロールに アクセスlambda:InvokeFunction
許可を追加します。このアクセス許可を追加するには、AWSCodeDeployRoleForECS
か AWSCodeDeployRoleForECSLimited
の AWSマネージドポリシーのいずれかをロールに追加します。これらのポリシーと、それらを CodeDeploy サービスロールに追加する方法については、「」を参照してくださいステップ 2: のサービスロールを作成する CodeDeploy。
ステータスコールバックを待っている間に、デプロイがタイムアウトした
問題: を使用して Amazon ECS アプリケーションをデプロイすると、次のエラーメッセージが表示されます 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.
考えられる原因: このエラーは、AppSpec ファイルの Hooksセクションで Lambda 関数を指定しても、Lambda 関数が必要な PutLifecycleEventHookExecutionStatus
API を呼び出して Succeeded
または Failed
ステータスを に返すことができなかった場合に発生する可能性があります CodeDeploy。
解決方法と次のステップ:
-
AppSpec ファイルで指定した Lambda 関数で使用される Lambda 実行ロールに アクセス
codedeploy:putlifecycleEventHookExecutionStatus
許可を追加します。このアクセス許可は、Lambda 関数にSucceeded
または のステータスを に返す機能を付与Failed
します CodeDeploy。Lambda 実行ロールの詳細については、「AWS Lambda ユーザーガイド」の「Lambda 実行ロール」を参照してください。 -
Lambda 関数のコードと実行ログをチェックして、Lambda 関数が CodeDeployの
PutLifecycleEventHookExecutionStatus
API を呼び出して、ライフサイクル検証テストSucceeded
と のどちらを呼び出し CodeDeployているかを確認しますFailed
。API の詳細については、putlifecycleEventHookExecutionStatus
「 API リファレンスPutLifecycleEventHookExecutionStatus」の「」を参照してください。 AWS CodeDeploy Lambda 実行ログの詳細については、「 の Amazon CloudWatch ログへのアクセス AWS Lambda」を参照してください。
1 つ以上のライフサイクルイベントの検証機能が失敗したため、デプロイが失敗しました
問題: を使用して Amazon ECS アプリケーションをデプロイすると、次のエラーメッセージが表示されます CodeDeploy。
The deployment failed because one or more of the lifecycle event validation
functions failed.
考えられる原因: このエラーは、AppSpec ファイルの Hooksセクションで Lambda 関数を指定しても、Lambda 関数が を呼び出し CodeDeploy たときFailed
に に戻った場合に発生する可能性がありますPutLifecycleEventHookExecutionStatus
。この失敗は、ライフサイクル検証テストが失敗した CodeDeploy ことを示します。
考えられる次のステップ: Lambda 実行ログを確認して、検証テストコードが失敗している理由を確認します。Lambda 実行ログの詳細については、「 の Amazon CloudWatch ログへのアクセス AWS Lambda」を参照してください。
「プライマリタスクセットのターゲットグループはリスナーの後ろにある必要があります」というエラーのため、ELB を更新できませんでした
問題: を使用して Amazon ECS アプリケーションをデプロイすると、次のエラーメッセージが表示されます CodeDeploy。
The ELB could not be updated due to the following error: Primary taskset target
group must be behind listener
考えられる原因:このエラーは、オプションのテストリスナーを設定しており、そのリスナーに間違ったターゲットグループが設定されている場合に発生する可能性があります。のテストリスナーの詳細については、Amazon ECSデプロイを開始する前に「」および CodeDeploy「」を参照してくださいAmazon ECSデプロイ中に発生すること。タスクセットの詳細については、「Amazon Elastic Container Service API リファレンスTaskSet」の「」および「 コマンドリファレンス」のdescribe-task-set「Amazon ECS」セクションの「」を参照してください。 AWS CLI
考えられる解決方法: Elastic Load Balancing の本稼働リスナーとテストリスナーの両方が、現在ワークロードを処理しているターゲットグループを指していることを確認します。確認すべき箇所は 3 つあります。
-
Amazon EC2 のロードバランサーの「リスナーとルール」の設定。詳細については、「Application Load Balancer のユーザーガイド」の「Application Load Balancer のリスナー」、または「Network Load Balancer のユーザーガイド」の「Network Load Balancer のリスナー」を参照してください。
-
Amazon ECS のクラスター内のサービスのネットワーク設定。詳細については、「Amazon Elastic Container Service デベロッパーガイド」の「Application Load Balancerおよび Network Load Balancerの場合」を参照してください。
-
では CodeDeploy、デプロイグループ設定で 。詳細については、「 Amazon ECS デプロイ用のデプロイグループを作成する (コンソール)」を参照してください。
Auto Scaling を使用するとデプロイが失敗することがあります
問題: で Auto Scaling を使用しているときに CodeDeploy 、デプロイが失敗することがあります。この問題の症状の詳細については、「Amazon Elastic Container Service デベロッパーガイド」の「サービスの自動スケーリングと ブルー/グリーンデプロイタイプを使用するように設定されたサービスでは、自動スケーリングはデプロイ中にブロックされませんが、状況によってはデプロイが失敗する場合があります」というトピックを参照してください。
考えられる原因: CodeDeploy と Auto Scaling プロセスが競合している場合、この問題が発生する可能性があります。
解決方法: RegisterScalableTarget
API (または対応するregister-scalable-target
AWS CLI コマンド) を使用して、 CodeDeploy デプロイ中に Auto Scaling プロセスを一時停止および再開します。詳細については、「Application Auto Scaling ユーザーガイド」の「Application Auto Scaling のスケーリングの一時停止と再開」を参照してください。
注記
CodeDeploy はRegisterScaleableTarget
直接 を呼び出すことはできません。この API を使用するには、Amazon Simple Notification Service (または Amazon ) に通知またはイベントを送信する CodeDeploy ように を設定する必要があります CloudWatch。次に、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 Deployments with Amazon SNS Event Notifications
ALB のみが段階的なトラフィックルーティングをサポートしており、デプロイグループを作成/更新するときにトラフィック AllAtOnce ルーティングを使用する
問題: でデプロイグループを作成または更新するときに、次のエラーメッセージが表示されます 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 コンピューティングプラットフォームの事前定義されたデプロイ設定」を参照してください。
-
ロードバランサーを Application Load Balancer に変更します。Application Load Balancer は、事前定義されたデプロイ設定をすべてサポートします。Application Load Balancer の作成の詳細については、「 CodeDeploy Amazon ECS デプロイ用のロードバランサー、ターゲットグループ、リスナーを設定する」を参照してください。
デプロイが成功しても、置き換えタスクセットは Elastic Load Balancing のヘルスチェックに失敗し、アプリケーションがダウンしています
問題: デプロイが成功したと が CodeDeploy 示しているにもかかわらず、置き換えタスクセットは Elastic Load Balancing からのヘルスチェックに失敗し、アプリケーションがダウンしています。
考えられる原因: CodeDeploy all-at-once デプロイを実行し、代替 (グリーン) タスクセットに Elastic Load Balancing ヘルスチェックが失敗する原因となっている不正なコードが含まれている場合に、この問題が発生する可能性があります。 all-at-once デプロイ設定では、トラフィックが置き換えタスクセットに移行された後 (つまり、 のAllowTraffic
ライフサイクルイベントが発生した後 CodeDeploy)、ロードバランサーのヘルスチェックが置き換えタスクセットで実行されます。そのため、トラフィックが移行した後は置き換えタスクセットでヘルスチェックが失敗しますが、それ以前には失敗しません。が CodeDeploy 生成するライフサイクルイベントの詳細については、「」を参照してくださいAmazon ECSデプロイ中に発生すること。
解決方法:
-
デプロイ設定を から Canary または線形 all-at-once に変更します。Canary または線形設定では、ロードバランサーのヘルスチェックは、 がアプリケーションを代替環境に CodeDeploy インストールしている間、およびトラフィックが移行される前 (つまり、
Install
ライフサイクルイベント中およびAllowTraffic
イベント前) に、代替タスクセットで実行されます。アプリケーションのインストール中、トラフィックが移行する前にチェックを実行できるようにすることで、アプリケーションが一般公開される前に誤ったアプリケーションコードが検出され、デプロイが失敗します。canary デプロイまたはリニアデプロイを設定する方法については、「でデプロイグループ設定を変更する CodeDeploy」を参照してください。
Amazon ECS デプロイ中に実行される CodeDeploy ライフサイクルイベントの詳細については、「」を参照してくださいAmazon ECSデプロイ中に発生すること。
注記
canary デプロイ設定およびリニアデプロイ設定は、Application Load Balancer でのみサポートされます。
-
all-at-once デプロイ設定を保持する場合は、テストリスナーを設定し、
BeforeAllowTraffic
ライフサイクルフックを使用して置き換えタスクセットのヘルスステータスを確認します。詳細については、「Amazon ECSデプロイのライフサイクルイベントフックのリスト」を参照してください。
1 つのデプロイグループに複数のロードバランサーをアタッチできますか?
いいえ。複数の Application Load Balancer または Network Load Balancer を使用する場合は、 CodeDeploy Blue/Green デプロイの代わりに Amazon ECS ローリング更新を使用します。ローリング更新の詳細については、「Amazon Elastic Container Service デベロッパーガイド」の「ローリング更新」を参照してください。Amazon ECS で複数のロードバランサーを使用する方法の詳細については、「Amazon Elastic Container Service デベロッパーガイド」の「サービスに複数のターゲットグループを登録する」を参照してください。
ロードバランサーなしで CodeDeploy ブルー/グリーンデプロイを実行できますか?
いいえ、ロードバランサーなしで CodeDeploy ブルー/グリーンデプロイを実行することはできません。ロードバランサーを使用できない場合は、代わりに Amazon ECS のローリング更新機能を使用してください。Amazon ECS のローリング更新機能の詳細については、「Amazon Elastic Container Service デベロッパーガイド」の「ローリング更新」を参照してください。
デプロイ中に Amazon ECS サービスを新しい情報で更新する方法を教えてください。
デプロイの実行中に Amazon ECS サービスを新しいパラメータで CodeDeploy 更新するには、 AppSpec ファイルの resources
セクションで パラメータを指定します。タスク定義ファイルやコンテナ名パラメータなど CodeDeploy、 でサポートされている Amazon ECS パラメータはごくわずかです。更新 CodeDeploy できる Amazon ECS パラメータの完全なリストについては、「」を参照してください AppSpec Amazon ECSデプロイの「リソース」セクション。
注記
でサポートされていないパラメータで Amazon ECS サービスを更新する必要がある場合は CodeDeploy、以下のタスクを完了します。
-
更新したいパラメータを指定して Amazon ECS の
UpdateService
API を呼び出します。更新できるパラメータの完全なリストについては、「Amazon Elastic Container Service API リファレンスUpdateService」の「」を参照してください。 -
変更をタスクに適用するには、新しい Amazon ECS ブルー/グリーンデプロイを作成します。詳細については、「Amazon ECS Compute Platform デプロイを作成する (コンソール)」を参照してください。