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

サービス

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% です。

注記

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

レプリカ

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

サービススケジューラは REPLICA 戦略を使用して、Fargate 起動タイプを使用する新しいタスクを起動したり、実行中のタスクを停止したりするときに、サービス内のアベイラビリティーゾーン間で負荷バランスを維持しようとします。

サービススケジューラは REPLICA 戦略を使用して、EC2 起動タイプを使用する新しいタスクを起動するときに以下のロジックに従います。

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

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

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

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

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

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

サービススケジューラは REPLICA 戦略を使用して、実行中のタスクを停止するときにクラスター内のアベイラビリティーゾーン間の負荷バランスを維持しようとします。EC2 起動タイプを使うタスクの場合、スケジューラは以下のロジックを使用します。

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

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

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

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

その他のサービスの概念

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

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

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