Amazon ECS タスクスケジューリング - Amazon Elastic Container Service

Amazon ECS タスクスケジューリング

Amazon Elastic Container Service (Amazon ECS)は、タスクとコンテナの柔軟なスケジュール機能を提供する、共有状態のオプティミスティックな並列システムです。Amazon ECSスケジューラはAmazon ECS API と同じクラスターの状態情報を利用して、適切な配置を決定します。

Fargate 起動タイプを使用する各タスクは独自の分離境界を持ち、他のタスクと基盤となるリソースを共有しません。これらのリソースには、基盤となるカーネル、CPU リソース、メモリリソース、および Elastic Network Interface が含まれます。

Amazon ECS は、長時間実行されるタスクおよびアプリケーションにサービススケジューラを提供します。バッチジョブまたは単一実行タスクに対してタスクを手動で実行することもできます。Amazon ECS は、クラスターにタスクを配置するたびに 1 つを提供します。ニーズに最適なタスクを実行するためのタスク配置戦略や制約を指定できます。たとえば、タスクを複数のアベイラビリティーゾーンにまたがって実行するか、単一のアベイラビリティーゾーン内で実行するかを指定できます。さらに、オプションとして、独自のカスタムまたはサードパーティーのスケジューラでタスクを統合することもできます。

サービススケジューラ

サービススケジューラは、長期実行するステートレスサービスやアプリケーションに適しています。サービススケジューラにより、指定したスケジューリング戦略が順守され、タスクが失敗したときに タスクが再スケジュールされます。たとえば、基盤となるインフラストラクチャに障害が発生した場合、サービススケジューラはタスクを再スケジュールできます。

利用できる 2 つのサービススケジューラ戦略があります。

  • REPLICA - レプリカスケジュール戦略では、クラスター全体で必要数のタスクを配置して維持します。デフォルトでは、サービススケジューラによってタスクはアベイラビリティーゾーン間で分散されます。タスク配置の戦略と制約を使用すると、タスク配置の決定をカスタマイズできます。詳細については、「レプリカ」を参照してください。

  • DAEMON - デーモンのスケジュール戦略では、指定したすべてのタスク配置制約を満たすクラスター内のアクティブなコンテナインスタンスごとに、1 つのタスクのみをデプロイします。サービススケジューラは、実行中のタスクのタスク配置制約を評価し、配置制約を満たさないタスクを停止します。この戦略を使用する場合、タスクの必要数や配置戦略、サービスの Auto Scaling ポリシーを指定する必要はありません。詳細については、のデーモンを参照してください。

    注記

    Fargate タスクは DAEMON スケジュール戦略をサポートしていません。

サービススケジューラはオプションで、タスクがElastic Load Balancingロードバランサーに登録されていることも確認します。サービススケジューラで維持されているサービスを更新できます。これには、新しいタスク定義のデプロイや、実行中のタスクの必要数の変更が含まれる場合があります。デフォルトでは、サービススケジューラによってタスクは複数のアベイラビリティーゾーン間で分散されます。ただし、タスク配置戦略と制約を使用すると、タスク配置の決定をカスタマイズできます。詳細については、「Amazon ECS サービス」を参照してください。

手動でタスクを実行

このRunTaskアクションは、作業を実行してから停止するバッチジョブなどのプロセスに適しています。例えば、キューに作業が入ったときに RunTask を呼び出す処理を入れることができます。タスクはキューから作業を引き出し、作業を実行して、その後終了します。RunTaskを使用すると、デフォルトのタスク配置戦略でクラスター全体にタスクをランダムに分散させることができます。これにより、単一のインスタンスが不均衡な数のタスクを取得する可能性を最小限に抑えることができます。また、RunTask を使用して、スケジューラがタスク配置戦略と制約を使用してタスクを配置する方法をカスタマイズできます。詳細については、スタンドアロンタスクの実行 新しいコンソールを使用してスタンドアロンタスクを実行するおよびAmazon Elastic Container Service API ReferenceRunTaskを参照してください。

cron ライクなスケジュールでのタスクの実行

クラスター内で一定間隔で実行するタスクがある場合、Amazon ECS コンソールを使用して EventBridge イベントを作成できます。バックアップ操作またはログスキャンのタスクを実行できます。作成する EventBridge イベントは、指定した時間にクラスター内の 1 つ以上のタスクを実行できます。スケジュールされたイベントは、特定の間隔 (N 分、時間または日ごとに実行されます) に設定できます。それ以外の場合、より複雑なスケジューリングには、cron 表現を使用できます。詳細については、「スケジュールされたタスク」を参照してください。

カスタムスケジューラ

Amazon ECS により、独自のスケジューラを作成、またはサードパーティーのスケジューラを使用することができます。Bloxは、コンテナ化されたアプリケーションをAmazon ECSでどのように実行するかをより詳細に制御できる、オープンソースプロジェクトです。Amazon ECS でスケジューラを構築したり、サードパーティーのスケジューラを統合したりすることに使用できます。同時に、Amazon ECS を使用してクラスターを管理およびスケールすることもできます。カスタムスケジューラは、StartTask API オペレーションを使用して、クラスター内の特定のコンテナインスタンスにタスクを配置します。

注記

カスタムスケジューラは、EC2 インスタンスでホストされるタスクとのみ互換性があります。Fargate で Amazon ECS を使用する場合、StartTask API は機能しません。

タスクの配置

RunTaskおよびCreateServiceアクションを使用して、タスク配置の制約とタスク配置戦略を指定します。これらは、Amazon ECS がタスクを配置および実行する方法をカスタマイズします。詳細については、「Amazon ECS タスクの配置」を参照してください。