Amazon Elastic Container Service
開発者ガイド (API バージョン 2014-11-13)

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

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

Fargate 起動タイプを使用する各タスクには独自の分離境界があり、基盤となるカーネル、CPU リソース、メモリリソース、または Elastic Network Interface は別のタスクと共有されません。

Amazon ECS には、サービススケジューラ (長期実行タスクおよびアプリケーション用に)、タスクを手動で実行する機能 (バッチジョブまたは単一実行タスク用)、および Amazon ECS でクラスターにタスクを配置する機能があります。また、タスク配置戦略と制約事項を指定できます。これにより、複数のアベイラビリティーゾーンに分散させるなど、選択した設定に基づいてタスクを実行できるようになります。さらに、カスタムのスケジューラやサードパーティー製スケジューラを統合することもできます。

サービススケジューラ

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

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

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

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

    注記

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

サービススケジューラではオプションで、タスクが Elastic Load Balancing ロードバランサーに確実に登録されるようにできます。新しいタスク定義のデプロイや目的のタスクの実行数の変更など、サービススケジューラで保守されているサービスを更新できます。デフォルトでは、サービススケジューラはアベイラビリティーゾーン間でタスクをスプレッドしますが、タスク配置の戦略と制約を使用してタスク配置の決定をカスタマイズできます。詳細については、「サービス」を参照してください。

手動でのタスク実行

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

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

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

カスタムスケジューラ

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

注記

カスタムスケジューラは、EC2 起動タイプを使用するタスクとのみ互換性があります。Fargate 起動タイプを使用している場合、StartTask API は機能しません。

タスクの配置

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