Amazon ECS サービスのスロットルロジック
Amazon ECS サービススケジューラには、サービスタスクが繰り返し起動に失敗した場合にタスクを起動する頻度を調整するロジックがあります。
サービスのタスクが繰り返し RUNNING
状態への遷移に失敗 (PENDING
から直接 STOPPED
ステータスに進行) する場合、その後の再起動の試行間隔は最大 27 分まで段階的に増加します。この最大期間は将来変更される可能性があります。この動作により、失敗しているタスクが Amazon ECS クラスターのリソースまたは Fargate のインフラストラクチャのコストに与える影響が軽減されます。サービスによって調整ロジックが開始されると、次のサービスイベントメッセージが表示されます。
(service
service-name
) is unable to consistently start tasks successfully.
Amazon ECS は、失敗したサービスの再試行を停止することはありません。また、再起動間隔を増やす以外に変更を加えようとすることもありません。サービスの調整ロジックにはユーザーが調整できるパラメータは用意されていません。
新しいタスク定義を使用するようにサービスを更新する場合、サービスは即時通常の調整されていない状態に戻ります。詳細については、「コンソールを使用した Amazon ECS サービスの更新」を参照してください。
このロジックを開始する一般的な原因を以下に示します。この問題に対処するには、手動で次のアクションを実行することをお勧めします。
-
クラスターでタスクをホストするためのリソース (ポート、メモリ、CPU ユニットなど) が不足している。この場合、不十分なリソースサービスイベントメッセージも表示されます。
-
Amazon ECS; コンテナエージェントがタスクの Docker イメージをプルできない。これは、コンテナイメージ名、イメージ、またはタグが不正であったり、プライベートレジストリの認証またはアクセス権限がないためである可能性があります。この場合、停止されたタスクのエラーに
CannotPullContainerError
も表示されます。 -
コンテナインスタンスでコンテナを作成するために十分なディスク容量が不足している。この場合、停止されたタスクのエラーに
CannotCreateContainerError
も表示されます。詳細については、「Amazon ECS の Docker API error (500): devmapper のトラブルシューティング」を参照してください。
重要
RUNNING
状態になった後で停止されたタスクは、調整ロジックまたは関連サービスイベントメッセージを開始しません。例えば、サービスの Elastic Load Balancing ヘルスチェックに失敗すると、異常を示すフラグがタスクに設定され、Amazon ECS が登録を解除して、タスクを停止するとします。この時点では、タスクはスロットリングされていません。タスクのコンテナコマンドでゼロ以外の終了コードで即時終了した場合でも、タスクは既に RUNNING
状態に移行しています。コマンドのエラーが原因で即時失敗したタスクは、スロットリングやサービスイベントメッセージを生じさせません。