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

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

    注記

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

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

手動でタスクを実行

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

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

バックアップオペレーションやログスキャンなど、クラスター内で一定間隔で実行するタスクがある場合は、Amazon ECSコンソールを使用して、指定した時間にクラスターで 1 つ以上のタスクを実行するCloudWatch Eventsルールを作成できます。スケジュールされたイベントルールは、特定の間隔 (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 タスクの配置」を参照してください。