Amazon ECS でのコンテナのスケジュール - Amazon Elastic Container Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon ECS でのコンテナのスケジュール

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

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

サービススケジューラ

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

また、コンテナのヘルスチェックまたはロードバランサーのターゲットグループのヘルスチェックが失敗すると、サービススケジューラーによって、異常であると判断されたタスクが置き換えられます。この置き換え動作は、maximumPercent および desiredCount のサービス定義パラメータによって異なります。タスクが異常とマークされた場合、サービススケジューラーによってまず置き換えタスクが開始されます。置き換えタスクのヘルスステータスが HEALTHY になると、サービススケジューラーは異常のあるタスクを停止します。置き換えタスクのヘルスステータスが UNHEALTHY の場合、スケジューラーは異常のある置き換えタスクまたは既存の異常タスクのいずれかを停止して、タスク総数が desiredCount と等しくなるようにします。maximumPercent パラメーターによって、置き換えタスクを先に開始できないようにスケジューラーが制限されている場合、スケジューラーは異常のあるタスクをランダムに 1 つずつ停止して容量を解放してから置き換えタスクを開始します。異常のあるタスクがすべて正常なタスクに置き換えられるまで、起動と停止のプロセスが続きます。異常なタスクがすべて置き換えられ、正常なタスクだけが実行中になると、合計タスク数が desiredCount を超える場合、タスク数が desiredCount になるまで、正常なタスクが無作為に停止されます。maximumPercent および desiredCount の詳細については、「サービス定義パラメータ」を参照してください。

注記

この動作は、ローリング更新デプロイタイプを使用するサービスによって実行および管理されるタスクには適用されません。ローリング更新中、サービススケジューラーはまず異常なタスクを停止してから置き換えタスクを開始します。

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

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

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

    注記

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

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

スタンドアロンタスク

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

スケジュールされたタスク

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

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

カスタムスケジューラ

Amazon ECS により、独自のスケジューラを作成、またはサードパーティーのスケジューラを使用することができます。詳細については、「Amazon ECS のカスタムスケジューラを作成する方法」を参照してください。カスタムスケジューラは StartTask API オペレーションを使用して、クラスター内の特定のコンテナインスタンスにタスクを配置します。

注記

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

タスクのライフサイクル

タスクが手動またはサービスの一部として開始されると、自己終了するか手動で停止されるまでに、複数の状態を経由します。バッチジョブとして実行され、PENDING から RUNNING、その後 STOPPED と自然に進行するタスクもあります。他のタスクの場合は、サービスの一部であることもありますが、無制限に実行され続けるか、必要に応じてスケールアップまたはスケールダウンします。

タスクの停止や、スケールアップまたはスケールダウンのためのサービスの必要数の更新など、タスクのステータスの変更がリクエストされた場合、Amazon ECS コンテナエージェントはこれらの変更をタスクの最後の既知のステータス (lastStatus) およびタスクの目的のステータス (desiredStatus) として追跡します。タスクの最後の既知のステータスと目的のステータスの両方が、コンソールでまたは API あるいは AWS CLI でタスクを記述することにより、表示できます。

以下のフローチャートは、タスクのライフサイクルのフローを示しています。


                タスクのライフサイクル状態の説明図。状態には、PROVISIONING、PENDING、ACTIVATING、RUNNING、DEACTOVATING、STOPPING があります。

ライフサイクル状態

それぞれのタスクのライフサイクル状態の説明は、以下のとおりです。

PROVISIONING

Amazon ECS は、タスクを起動する前に追加のステップを実行する必要があります。例えば、awsvpc ネットワークモードを使用するタスクの場合、Elastic Network Interface をプロビジョニングする必要があります。

保留中

これは、Amazon ECS が他の操作を実行するためにコンテナエージェントで待機している遷移状態です。タスクは、そのタスクに利用可能なリソースがあるまで保留状態のままです。

アクティブ化中

これは、タスクが起動された後で、タスクが RUNNING 状態に移行する前に、Amazon ECS が追加の手順を実行する必要がある移行状態です。例えば、サービス検出が設定されているタスクの場合、サービス検出リソースを作成する必要があります。複数の Elastic Load Balancing ターゲットグループを使用するように設定されたサービスの一部であるタスクの場合、この状態でターゲットグループの登録が行われます。

RUNNING

タスクを正常に実行中です。

非アクティブ化中

これは、タスクを停止する前に Amazon ECS が追加のステップを実行する必要がある移行状態です。例えば、複数の Elastic Load Balancing ターゲットグループを使用するように設定されたサービスの一部であるタスクの場合、この状態でターゲットグループの登録解除が行われます。

停止中

これは、Amazon ECS が他の操作を実行するためにコンテナエージェントで待機している遷移状態です。

Linux コンテナの場合、コンテナエージェントは、アプリケーションを終了してシャットダウンする必要があることを通知する SIGTERM シグナルを送信し、タスク定義で設定された StopTimeout 期間を待った後に SIGKILL を送信します。

プロビジョン解除中

Amazon ECS は、タスクが停止された後で、タスクが STOPPED 状態に移行する前に、追加の手順を実行する必要があります。例えば、awsvpc ネットワークモードを使用するタスクの場合、Elastic Network Interface をデタッチして削除する必要があります。

停止

タスクは正常に停止しました。

DELETED

これは、タスクが停止したときの移行状態です。この状態はコンソールには表示されませんが、describe-tasks に表示されます。