Amazon Elastic Container Service (Amazon ECS) タスクが停止状態に移行するまでに長い時間がかかります。または、コンテナインスタンスが DRAINING に設定されているのに Amazon ECS タスクが実行中の状態のままになります。この問題はどうすれば解決できますか?
簡単な説明
ECS インスタンスを DRAINING に設定すると、Amazon ECS は次のことを行います:
- 新しいタスクがコンテナインスタンスに配置されるようにスケジュールされないようにします
- 実行中状態のコンテナインスタンス上のタスクを停止します
設定パラメータまたはタスクの問題により、タスクが実行中状態のままになったり、停止状態への移行に時間がかかったりすることがあります。これらの問題をトラブルシューティングするには、次のオプションを検討してください。
解決策
DeploymentConfiguration パラメーターが正しく設定されていることを確認する
- Amazon ECS コンソールを開きます。
- ナビゲーションペインで [Clusters] を選択し、コンテナインスタンスがドレインしているクラスターを選択します。
- [ECS インスタンス] タブを選択し、[ステータス] セクションで [DRAINING] を選択します。
- コンテナインスタンスを選択し、ドレインが発生している、またはドレインに時間がかかるタスクのサービスを調べます。
- [サービス] タブを選択し、サービスを選択して、[デプロイ] を選択します。
- [minimumHealthyPercent] と [maximumPercent] の値を確認します。
注:****実行中の状態のコンテナインスタンス上のサービスタスクは停止され、サービスのデプロイ設定パラメータ minimumHealthyPercent と maximumPercent に従って置き換えられます。
登録解除遅延値が正しく設定されていることを確認する
**重要:**次のステップは、Application Load Balancer または Network Load Balancer を使用するサービスにのみ適用されます。サービスが Classic Load Balancer を使用している場合は、Connection Draining 値を確認してください。
- Amazon ECS コンソールを開きます。
- ナビゲーションペインで [Clusters] を選択し、コンテナインスタンスがドレインしているクラスターを選択します。
- [サービス] タブを選択し、スタックが [実行中] のままになっているサービスを選択します。
- ターゲットグループ名を選択します。
- [詳細] タブを下にスクロールし、[登録解除の遅延] チェックボックスを選択します。
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 ログに問題がないか確認してください。