Amazon ECS サービス - Amazon Elastic Container Service

Amazon ECS サービス

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

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

長時間実行されるステートレスサービスおよびアプリケーションには、サービススケジューラを使用することをお勧めします。サービススケジューラにより、指定したスケジューリング戦略が順守され、タスクが失敗したときに タスクが再スケジュールされます。例えば、基盤となるインフラストラクチャに障害が発生した場合、サービススケジューラはタスクを再スケジュールします。タスク配置の戦略と制約を使用して、スケジューラがタスクを配置および終了する方法をカスタマイズできます。サービス内のタスクが停止すると、スケジューラはタスクを置き換えるために新しいタスクを起動します。このプロセスは、サービスが使用するスケジュール戦略に基づいて、サービスがタスクの必要数に達するまで続行されます。サービスのスケジューリング戦略は、サービスタイプとも呼ばれます。

また、コンテナのヘルスチェックまたはロードバランサーのターゲットグループのヘルスチェックが失敗すると、サービススケジューラーによって、異常であると判断されたタスクが置き換えられます。この置き換え動作は、maximumPercent および desiredCount のサービス定義パラメータによって異なります。タスクが異常とマークされた場合、サービススケジューラーによってまず置き換えタスクが開始されます。次に以下が発生します。

  • 置き換えタスクのヘルスステータスが HEALTHY になると、サービススケジューラーが異常のあるタスクを停止します。

  • 置き換えタスクのヘルスステータスが UNHEALTHY の場合、スケジューラーは異常のある置き換えタスクまたは既存の異常タスクのいずれかを停止して、タスク総数が desiredCount と等しくなるようにします。

maximumPercent パラメーターによって、置き換えタスクを先に開始できないようにスケジューラーが制限されている場合、スケジューラーは異常のあるタスクをランダムに 1 つずつ停止して容量を解放してから置き換えタスクを開始します。異常のあるタスクがすべて正常なタスクに置き換えられるまで、起動と停止のプロセスが続きます。異常なタスクがすべて置き換えられ、正常なタスクだけが実行中になると、合計タスク数が desiredCount を超える場合、タスク数が desiredCount になるまで、正常なタスクが無作為に停止されます。maximumPercent および desiredCount の詳細については、「サービス定義パラメータ」を参照してください。

サービススケジューラには、タスクが繰り返し起動に失敗した場合にタスクを再起動する頻度を調整するロジックが含まれています。RUNNING 状態にならずにタスクが停止すると、サービススケジューラは起動の試行の速度を遅くし始め、サービスイベントメッセージを送信します。この動作により、問題を解決する前に、失敗したタスクに不要なリソースが使用されるのを防ぐことができます。サービスが更新されると、サービススケジューラは正常なスケジューリング動作を再開します。詳細については、「Amazon ECS サービスのスロットルロジック」および「Amazon ECS のサービスイベントメッセージを表示する」を参照してください。

インフラストラクチャコンピューティングオプション

タスクを分散するコンピューティングオプションが 2 つあります。

  • [capacity provider strategy] (キャパシティープロバイダー戦略) により、Amazon ECS がタスクを 1 つまたは複数のキャパシティプロバイダーに分散させます。

    [capacity provider strategy] (キャパシティープロバイダー戦略) では、コンソールはデフォルトでコンピューティングオプションを選択します。次に、コンソールがデフォルトを選択するときに使用する順序について説明します。

    • クラスターにデフォルトのキャパシティープロバイダー戦略が定義されている場合は、その戦略が選択されます。

    • クラスターにデフォルトのキャパシティープロバイダー戦略が定義されていないが、Fargate キャパシティープロバイダーをクラスターに追加している場合は、キャパシティープロバイダーを使用するカスタム FARGATE キャパシティープロバイダー戦略が選択されます。

    • クラスターにデフォルトのキャパシティープロバイダー戦略が定義されていないが、クラスターに 1 つ以上の Auto Scaling グループキャパシティープロバイダーが追加されている場合は、[Use custom (アドバンスト)] オプションが選択され、戦略を手動で定義する必要があります。

    • クラスターにデフォルトのキャパシティープロバイダー戦略が定義されておらず、クラスターにキャパシティープロバイダーが追加されていない場合は、Fargate起動タイプが選択されます。

  • [起動タイプ] により、Amazon ECS は Fargate またはクラスターに登録された EC2 インスタンスのいずれかでタスクを直接起動します。

    デフォルトでは、サービスはクラスター VPC のサブネットで開始されます。

サービスのオートスケーリング

サービスの自動スケーリングは、Amazon ECS サービスで必要なタスク数を自動的に増減する機能です。Amazon ECS は アプリケーション Auto Scaling サービスを活用してこの機能を提供します。

詳細については、「Amazon ECS サービスを自動的にスケールする」を参照してください。

サービスの負荷分散

AWS Fargate でホストされている Amazon ECS サービスでは、Application Load Balancer、Network Load Balancer、および Gateway Load Balancer がサポートされています。次の表を使用して、使用するロードバランサーのタイプを確認してください。

ロードバランサーのタイプ 以下の場合に使用

Application Load Balancer

HTTP/HTTPS (またはレイヤー 7) トラフィックをルーティングします。

Amazon Load Balancer は Amazon ECS サービスでの使用に便利な複数の機能を提供しています。

  • 各サービスは、複数のロードバランサーからトラフィックを送信し、複数のターゲットグループを指定することにより複数のロードバランシングポートを公開できます。

  • バインドマウントは、Fargate インスタンスと Amazon EC2 インスタンスの両方でホストされているタスクでサポートされています。

  • Application Load Balancer により、コンテナが動的ホストポートマッピングを使用できるようになります (同じサービスから複数のタスクがコンテナインスタンスごとに許可するため)。

  • Application Load Balancer では、パスベースのルーティングと優先ルールをサポートしています (複数のサービスが 1 つの Application Load Balancer で同じリスナーポートを使用するため)。

Network Load Balancer TCP または UDP (またはレイヤー 4) トラフィックをルーティングします。
Gateway Load Balancer TCP または UDP (またはレイヤー 4) トラフィックをルーティングします。

ファイアウォール、侵入検知および防止システム、ディープパケットインスペクションシステムなどの仮想アプライアンスを使用します。

詳細については、「ロードバランサーを使用して Amazon ECS サービストラフィックを分散する」を参照してください。

相互接続サービス

Amazon ECS サービスとして実行される他のアプリケーションにアプリケーションを接続する必要がある場合、Amazon ECS ではロードバランサーを使用せずに、次の方法で実行できます。

  • Service Connect – 短い名前と標準ポートを使用した自動検出によるサービス間の通信を実現します。

  • サービス検出 – サービス検出では、Route 53 を使用してサービスの名前空間を作成し、DNS を介して検出できるようにします。

  • Amazon VPC Lattice – VPC Lattice は、複数のアカウントおよび VPC 間でサービスを接続、保護、モニタリングするフルマネージドのアプリケーションネットワーキングサービスです。関連するコストが発生します。

詳細については、「Amazon ECS サービスを相互接続する」を参照してください。