Amazon ECS サービス - Amazon Elastic Container Service

Amazon ECS サービス

Amazon ECS サービスを使用すると、Amazon ECS クラスター内で、タスク定義の指定した数のインスタンスを同時に実行して維持できます。タスクが何らかの理由で失敗または停止した場合、Amazon ECS サービススケジューラは、タスク定義の別のインスタンスを起動してそれに置き換え、サービスで必要数のタスクを維持します。

サービスで必要数のタスクを維持することに加えて、オプションでロードバランサーの背後でサービスを実行することもできます。ロードバランサーは、サービスに関連付けられたタスク間でトラフィックを分散させます。

サービススケジューラの概念

サービススケジューラは、長期実行するステートレスサービスおよびアプリケーションに適しています。サービススケジューラにより、指定したスケジュール戦略が順守され、タスクが失敗したときに (基盤となるインフラストラクチャに何らかの理由で障害が発生した場合などに) タスクが再スケジュールされます。タスク配置の戦略と制約を使用して、スケジューラがタスクを配置および終了する方法をカスタマイズできます。サービスのタスクが停止した場合、そのタスクは強制終了されてから、新しいタスクが開始されます。このプロセスは、サービスの作成時に指定するスケジュール戦略 (サービスタイプともいいます) に基づいて、サービスが実行中のタスクの必要数に達するまで続行されます。

サービススケジューラには、タスクが繰り返し起動に失敗した場合にタスクを再起動する頻度を調整するロジックが含まれています。タスクが RUNNING 状態にならずに停止した場合 (タスクに startedAt タイムスタンプがあることで判断されます)、サービススケジューラは起動の試行の増分的な減速を開始し、サービスイベントメッセージを出力します。この動作により、失敗したタスクに対して不必要なリソースの使用が回避され、問題を解決できる可能性が生まれます。サービスが更新されると、サービススケジューラは正常な動作を再開します。詳細については、「サービスの調整ロジック」および「サービスイベントメッセージ」を参照してください。

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

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

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

    注記

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

デーモン

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

デーモンサービススケジューラは DRAINING ステータスのインスタンスにはタスクを配置しません。コンテナインスタンスが DRAINING に移行すると、そのインスタンス上のデーモンタスクは停止します。サービススケジューラはまた、新しいコンテナインスタンスがいつクラスターに追加されるかをモニタリングし、追加されたらそれらのインスタンスにデーモンタスクを追加します。

deploymentConfiguration を指定した場合、maximumPercent パラメータは 100 になっている必要があります。デーモンサービスの maximumPercent のデフォルト値は 100% です。デーモンサービスの minimumHealthyPercent のデフォルト値は、AWS CLI、AWS SDK、API では 0%、AWS マネジメントコンソール では 50% です。

Fargate 起動タイプを使用するタスク、Fargate、CODE_DEPLOY または EXTERNAL デプロイコントローラータイプを使用するタスクは、デーモンスケジューリング戦略をサポートしません。

注記

デーモンサービススケジューラは Classic Load Balancer の使用をサポートしていません。

レプリカ

レプリカスケジュール戦略では、クラスターに必要数のタスクを配置して維持します。

タスクで Fargate 起動タイプを使用する場合、サービススケジューラは、新しいタスクの起動時や実行中タスクの停止時に、アベイラビリティーゾーン間の負荷バランスを維持します。

タスクで EC2 起動タイプを使用する場合は、オプションでタスク配置戦略と制約を指定して、タスク配置の決定をカスタマイズできます。タスク配置戦略または制約が指定されていない場合、デフォルトでは、サービススケジューラはタスクをアベイラビリティーゾーン全体に分散します。スケジューラは、次のロジックを使用します。

  • クラスター内のどのコンテナインスタンスがサービスのタスク定義をサポートできるか (必要な CPU、メモリ、ポート、コンテナインスタンス属性があるかどうかなど) を判断します。

  • サービスに定義された配置の制約を満たすコンテナインスタンスを特定します。

  • 定義された配置戦略がある場合は、その戦略を使用して残りの候補からインスタンスを選択します。

  • 配置戦略が定義されていない場合は、次のロジックを使用してクラスター内のアベイラビリティーゾーン全体にタスクが配分されます。

    • 有効なコンテナインスタンスを、それぞれのアベイラビリティーゾーンで実行中のサービスタスクが少ない順にソートします。たとえば、ゾーン A に実行中のサービスタスクが 1 つあり、ゾーン B と C に実行中のサービスタスクがない場合、ゾーン B または C のいずれかの有効なコンテナインスタンスが配置に最適と見なされます。

    • 新しいサービスタスクを最適なアベイラビリティーゾーン内の有効なコンテナインスタンスに配置し (前の手順に基づいて)、実行中のサービスタスクの数が最小のコンテナインスタンスを優先させます。

サービススケジューラは、EC2 起動タイプを使用する実行中タスクの停止時に、クラスター内のアベイラビリティーゾーン間の負荷バランスを維持します。スケジューラは、次のロジックを使用します。

  • 配置戦略が定義されている場合、その戦略を使用して終了するタスクを選択します。たとえば、サービスにアベイラビリティーゾーンの spread 戦略が定義されている場合、1 つのタスクが選択され、残りのタスクは最適に分散されたまま残ります。

  • 配置戦略が定義されていない場合は、次のロジックを使用してクラスター内のアベイラビリティーゾーン全体への配分が維持されます。

    • 有効なコンテナインスタンスを、それぞれのアベイラビリティーゾーンで実行中のサービスタスクが多い順にソートします。たとえば、実行中のサービスタスクがゾーン A には 1 つ、ゾーン B とゾーン C にはそれぞれ 2 つずつある場合、ゾーン B またはゾーン C のいずれかのコンテナインスタンスが終了に最適と見なされます。

    • 実行中のサービスタスクの数が多いコンテナインスタンスの順に従って、最適なアベイラビリティーゾーン内のコンテナインスタンスで (前述の手順に基づいて) タスクを停止します。

その他のサービスの概念

  • オプションで、ロードバランサーの背後でサービスを実行できます。詳細については、「サービスの負荷分散」を参照してください。

  • オプションで、サービスのデプロイ設定を指定できます。デプロイは、タスク定義またはサービスの必要数を更新することでトリガーされます。デプロイ中、サービススケジューラは、最小ヘルス率最大ヘルス率のパラメータを使用して、デプロイ戦略を判断します。詳細については、「サービス定義パラメータ」を参照してください。

  • サービスはオプションで Amazon ECS サービス検出 を使用するように設定できます。サービス検出 は Amazon Route 53 自動命名 API を使用して、サービスのタスクの DNS エントリを管理し、VPC 内で検出できるようにします。詳細については、「サービス検出」を参照してください。

  • サービスを削除するときに、クリーンアップが必要なタスクがまだ実行中の場合、サービスステータスは ACTIVE から DRAINING に移行し、そのサービスはコンソールまたは ListServices API オペレーションで表示されなくなります。すべてのタスクが STOPPING または STOPPED ステータスに以降されたら、サービスステータスは DRAINING から INACTIVE になります。ステータスが DRAINING または INACTIVE のサービスは、DescribeServices API オペレーションで引き続き表示できます。ただし、INACTIVE ステータスのサービスは、後で Amazon ECS によって保存されたレコードからクリーンアップされて削除され、それらのサービスに対して DescribeServices を呼び出すと、ServiceNotFoundException エラーが返る可能性があります。