コンテナインスタンスが DRAINING に設定されているときに、Amazon ECS タスクが停止するまでに時間がかかる場合のトラブルシューティング方法を教えてください。
最終更新日: 2022 年 4 月 28 日
Amazon Elastic Container Service (Amazon ECS) タスクが STOPPED 状態に移行するのに時間がかかっています。または、コンテナインスタンスが DRAINING に設定されている場合、Amazon ECS タスクが RUNNING 状態でスタックしています。この問題の解決方法を教えてください。
簡単な説明
ECS インスタンスを DRAINING に設定すると、Amazon ECS は以下の処理を実行します。
- 新しいタスクがコンテナインスタンスにスケジュールが配置されないようにする
- RUNNING 状態のコンテナインスタンスでタスクを停止します。
設定パラメータまたはタスクの問題により、タスクが RUNNING 状態でスタックするか、STOPPED 状態に移行するまでに時間がかかることがあります。これらの問題をトラブルシューティングするには、次のオプションを検討します。
- DeploymentConfiguration パラメータが正しく設定されていることを確認する
- 登録解除の遅延値が正しく設定されていることを確認する
- ECS_CONTAINER_STOP_TIMEOUT 値が正しく設定されていることを確認する
- 他のタスク関連の問題を探す
解決方法
DeploymentConfiguration パラメータが正しく設定されていることを確認する
- Amazon ECS コンソールを開きます。
- ナビゲーションペインで、 クラスター を選択し、コンテナインスタンスがドレインされているクラスターを選択します。
- [ECS インスタンス] タブを選択し、[状態] セクションで DRAINING を選択します。
- コンテナインスタンスを選択し、ドレイン中またはドレインに長い時間がかかるタスクのサービスを見つけます。
- [サービス] タブを選択し、サービスを選択して、[デプロイ] を選択します。
- minimumHealthyPercent と maximumPercent の値を確認します。
注意: RUNNING 状態にあるコンテナインスタンスのサービスタスクは、サービスのデプロイ設定パラメータ minimumHealthyPercent および maximumPercentに従って停止され、置き換えられます。
登録解除の遅延値が正しく設定されていることを確認する
重要 : 次の手順は、Application Load Balancer または Network Load Balancer を使用するサービスにのみ適用されます。サービスで Classic Load Balancer を使用している場合は、Connection Draining の値を確認します。
- [Amazon ECS コンソール] を開きます。
- ナビゲーションペインで、[クラスター] を選択し、コンテナインスタンスがドレインされているクラスターを選択します。
- [サービス] タブを選択し、スタックが RUNNING のままでスタックしているサービスを選択します。
- [ターゲットグループ名] を選択します。
- [詳細] タブで、下にスクロールし、[登録解除の遅延] チェックボックスをオンにします。
ECS_CONTAINER_STOP_TIMEOUT 値が正しく設定されていることを確認する
- SSH を使用してコンテナインスタンスに接続します。
- docker inspect ecs-agent --format '{{json .Config.Env}}' コマンドを実行します。
- ECS_CONTAINER_STOP_TIMEOUT の値があるかどうかを確認します。
注意: ECS_CONTAINER_STOP_TIMEOUT は、コンテナを終了する前に Amazon ECS が待機する時間を定義する ECS コンテナエージェントパラメータです。タスクが停止するときに、期間のカウントが開始します。ステップ 2 でコマンドを実行した後で、出力に ECS_CONTAINER_STOP_TIMEOUT パラメータが表示されない場合、Amazon ECS はデフォルト値の 30 秒を使用します。
他のタスク関連の問題を探す
- SSH を使用してコンテナインスタンスに接続します。
- Docker デーモンと Amazon ECS コンテナエージェントが Amazon Linux 1 AMI または Amazon Linux 2 AMI に対して実行されていることを確認します。
- logConfigurationによって設定されたログドライバーに基づいて、アプリケーションログを確認します。
注意: 例えば、タスクで awslogs ログドライバーを使用している場合は 、Amazon CloudWatch Logs に問題がないか確認します。