Amazon ECS は、Elastic Load Balancing、AWS Cloud Map、Amazon EC2 など、いくつかの AWS のサービス と統合されています。この緊密な統合により、Amazon ECS ではサービスの負荷分散、Service Connect、タスクネットワーク、クラスターの自動スケーリングなどのいくつかの機能を利用できます。Amazon ECS および、統合されているその他の AWS のサービス はすべて、一貫したパフォーマンスと利用率を確保するために、サービスクォータと API レート制限を維持します。また、これらのサービスクォータは、必要以上のリソースを誤ってプロビジョニングすることを防ぎ、請求額を増やす可能性のある悪意のある行為からも保護します。
サービスクォータと AWS API のレート制限をよく理解しておけば、予期しないパフォーマンスの低下を心配することなく、ワークロードのスケーリングを計画できます。詳細については、「Amazon ECS API のリクエストのスロットリング」を参照してください。
Amazon ECS でワークロードをスケーリングする場合は、次のサービスクォータを検討することをお勧めします。
-
AWS Fargate には、各 AWS リージョン のタスクで同時に実行できるタスクの数を制限するクォータがあります。Amazon ECS では、オンデマンドタスクと Fargate Spot タスクの両方にクォータが設定されています。各サービスクォータには、Fargate で実行するすべての Amazon EKS ポッドも含まれます。
-
Amazon EC2 インスタンスで実行されるタスクの場合、各クラスターに登録できる Amazon EC2 インスタンスの最大数は 5,000 です。Auto Scaling グループの容量プロバイダーで Amazon ECS クラスターの自動スケーリングを使用する場合、またはクラスターの Amazon EC2 インスタンスを自分で管理する場合、このクォータがデプロイのボトルネックになる可能性があります。さらに容量が必要な場合は、クラスターをさらに作成するか、サービスクォータの引き上げをリクエストすることができます。
-
Auto Scaling グループのキャパシティプロバイダーで Amazon ECS クラスターの自動スケーリングを使用する場合は、サービスをスケーリングする際に
Tasks in the PROVISIONING state per cluster
クォータを考慮してください。このクォータは、キャパシティプロバイダーがキャパシティを増やすことができる各クラスターのPROVISIONING
状態にあるタスクの最大数です。多数のタスクを同時に起動すると、すぐにこのクォータに達してしまいます。たとえば、それぞれ数百のタスクを含む数十のサービスを同時にデプロイする場合です。この場合、クラスターのキャパシティが不足すると、キャパシティープロバイダーは新しいコンテナインスタンスを起動してタスクを配置する必要があります。キャパシティープロバイダーが追加の Amazon EC2 インスタンスを起動している間、Amazon ECS サービススケジューラーは引き続きタスクを並行して起動する可能性があります。ただし、クラスターのキャパシティが不十分なため、このアクティビティが抑制される可能性があります。Amazon ECS サービススケジューラは、新しいコンテナインスタンスが起動したときにタスク配置を再試行するためのバックオフおよびエクスポネンシャルスロットリング戦略を実装しています。その結果、デプロイやスケールアウトに時間がかかる可能性があります。このような状況を回避するには、以下のいずれかの方法でサービスのデプロイを計画してください。クラスター容量を増やす必要がないように多数のタスクをデプロイするか、新しいタスクの起動に備えて予備のクラスター容量を確保しておくかのどちらかです。
ワークロードをスケーリングする際には Amazon ECS サービスクォータを考慮することに加えて、Amazon ECS と統合されている他の AWS のサービス 用のサービスクォータも考慮してください。
エラスティックロードバランシング
Fargate の Amazon ECS サービスは、Elastic Load Balancing を使用してタスク間でトラフィックを均等に分散するように設定できます。ロードバランサーの選択方法の詳細と推奨ベストプラクティスについては、ロードバランサーを使用して Amazon ECS サービストラフィックを分散する を参照してください。
Elastic Load Balancing のサービスクォータ
ワークロードをスケーリングするときは、以下の Elastic Load Balancing のサービスクォータを考慮してください。Elastic Load Balancing のサービスクォータのうち、ほとんどは調整可能で、Service Quotas コンソールでリクエストできます。
Application Load Balancer
Application Load Balancer を使用する際、ユースケースによっては、以下のクォータ増加をリクエストする必要がある場合があります。
-
Application Load Balancer の背後にあるターゲットの数である
Targets per Application Load Balancer
クォータ。 -
ターゲットグループの背後にあるターゲットの数である
Targets per Target Group per Region
クォータ。
詳細については、Application Load Balancer ユーザーガイドの「Application Load Balancer のクオータ」を参照してください。
Network Load Balancer
Network Load Balancer に登録できるターゲットの数には、より厳しい制限があります。Network Load Balancer を使用する場合、クロスゾーンサポートを有効にする必要があることがよくあります。これには、各 Network Load Balancer のアベイラビリティーゾーンあたりの Targets per Availability Zone Per
Network Load Balancer
最大ターゲット数に対する追加のスケーリング制限が伴います。詳細については、Network Load Balancers ユーザーガイドの「Network Load Balancer のクォータ」を参照してください。
Elastic Load Balancing API のスロットリング
ロードバランサーを使用するように Amazon ECS サービスを設定する場合、サービスが正常であると見なされるには、ターゲットグループのヘルスチェックに合格する必要があります。これらのヘルスチェックを実行するために、Amazon ECS はユーザーに代わって Elastic Load Balancing API 操作を呼び出します。アカウントにロードバランサーが設定されたサービスが多数ある場合、特に RegisterTarget
、DeregisterTarget
、DescribeTargetHealth
Elastic Load Balancing API 操作のスロットリングが発生する可能性があるため、サービスのデプロイが遅くなる可能性があります。スロットリングが発生すると、Amazon ECS サービスのイベントメッセージにスロットリングエラーが発生します。
AWS Cloud Map API でスロットリングが発生した場合は、AWS Cloud Map API のスロットリング制限を引き上げる方法について サポート までお問い合わせください。これらのスロットリングエラーの監視とトラブルシューティングの詳細については、「Amazon ECS のスロットリングに関する問題を処理する」を参照してください。
Elastic Network Interface
タスクが awsvpc
ネットワークモードを使用する場合、Amazon ECS はタスクごとに独自の Elastic Network Interface (ENI) をプロビジョニングします。Amazon ECS サービスが Elastic Load Balancing ロードバランサーを使用する場合、これらのネットワークインターフェイスは、サービスで定義された適切なターゲットグループのターゲットとしても登録されます。
Elastic Network Interface のサービスクォータ
awsvpc
ネットワークモードを使用するタスクを実行すると、固有のエラスティックネットワークインターフェイスが各タスクにアタッチされます。インターネット経由でこれらのタスクにアクセスする必要がある場合は、タスクのエラスティックネットワークインターフェイスにパブリック IP アドレスを割り当てます。Amazon ECS ワークロードをスケーリングするときは、次の 2 つの重要なクォータを考慮してください。
-
アカウントの AWS リージョン におけるネットワークインターフェイスの最大数である
Network interfaces per Region
クォータ。 -
AWS リージョン に含まれる Elastic IP アドレスの最大数である
Elastic IP addresses per Region
クォータ。
これらのサービスクォータは両方とも調整可能で、Service Quotas コンソールから増加をリクエストできます。詳細については、Amazon Virtual Private Cloud ユーザーガイドの「Amazon VPC サービスクォータ」を参照してください。
Amazon EC2 インスタンスでホストされている Amazon ECS ワークロードの場合、awsvpc
ネットワークモードを使用するタスクを実行するときは、各 Amazon EC2 インスタンスの最大ネットワークインスタンスの数である Maximum network
interfaces
サービスクォータを考慮してください。このクォータは、1 つのインスタンスに配置できるタスクの数を制限します。クォータを調整することはできず、Service Quotas コンソールでは使用できません。詳細については、Amazon EC2 ユーザーガイドの「各インスタンスタイプのネットワークインターフェイスごとの IP アドレス」を参照してください。
Amazon EC2 インスタンスにアタッチできるネットワークインターフェイスの数は変更できませんが、エラスティックネットワークインターフェイスのトランキング機能を使用して利用可能なネットワークインターフェイスの数を増やすことができます。たとえば c5.large
インスタンスにはデフォルトでネットワークインターフェイスを最大 3 つアタッチできます。このインスタンスのプライマリネットワークインターフェイスも、1 個としてカウントされます。そのため、このインスタンスに追加で 2 個のネットワークインターフェイスをアタッチできます。awsvpc
ネットワークモードを使用する各タスクにはネットワークインターフェイスが必要なため、通常このインスタンスタイプでは、これらのタスクを 2 つのみ実行できます。これにより、クラスターの容量が十分に活用されない可能性があります。エラスティックネットワークインターフェイスでトランキングを有効にすると、ネットワークインターフェイスの密度を上げて、各インスタンスにより多くのタスクを配置できます。トランキングをオンにすると、1 つの c5.large
インスタンスに最大 12 のネットワークインターフェースを設定できます。インスタンスはプライマリネットワークインターフェイスを持ち、Amazon ECS は「トランク」ネットワークインターフェイスを作成し、アタッチします。その結果、この構成では、デフォルトの 2 つのタスクではなく、10 のタスクをインスタンスで実行できます。詳細については、「Amazon ECS Linux コンテナインスタンスのネットワークインターフェイスを増やす」を参照してください。
エラスティックネットワークインターフェイス API のスロットリング
awsvpc
ネットワークモードを使用するタスクを実行する場合、Amazon ECS は次の Amazon EC2 API に依存します。これらの API にはそれぞれ異なる API スロットリングがあります。詳細については、Amazon EC2 API リファレンスの「Amazon EC2 API におけるリクエストのスロットリング」を参照してください。
-
CreateNetworkInterface
-
AttachNetworkInterface
-
DetachNetworkInterface
-
DeleteNetworkInterface
-
DescribeNetworkInterfaces
-
DescribeVpcs
-
DescribeSubnets
-
DescribeSecurityGroups
-
DescribeInstances
エラスティックネットワークインターフェイスのプロビジョニングワークフロー中に Amazon EC2 API コールがスロットリングされた場合、Amazon ECS サービススケジューラは自動的にエクスポネンシャルバックオフを行って再試行します。これらの自動廃止により、タスクの起動が遅れ、デプロイ速度が遅くなることがあります。API スロットリングが発生すると、サービスイベントメッセージにメッセージ Operations are being
throttled. Will try again later.
が表示されます。Amazon EC2 API でスロットリングが継続的に発生する場合は、API のスロットリング制限を引き上げる方法について サポート までお問い合わせください。スロットリングエラーの監視とトラブルシューティングの詳細については、「スロットリング問題の処理」を参照してください。
AWS Cloud Map
Amazon ECS サービス検出と Service Connect では、AWS Cloud Map API を使用して Amazon ECS サービスの名前空間を管理します。サービスに多数のタスクがある場合は、以下の推奨事項を考慮してください。
AWS Cloud Map Service Quotas
Amazon ECS サービスがサービス検出または Service Connect を使用するように設定されている場合、サービスの最大タスク数である Tasks per service
クォータは、そのサービスの最大インスタンス数である AWS Cloud Map Instances per service
サービスクォータの影響を受けます。特に、AWS Cloud Map サービスクォータにより、実行できるインスタンスの数は、サービスあたり最大 1,0000 インスタンスに減少します。AWS Cloud Map のクォータは変更できません。詳細については、「AWS Cloud Map のサービスクォータ」を参照してください。
AWS Cloud Map API スロットリング
Amazon ECS はユーザーに代わってListInstances
、GetInstancesHealthStatus
、RegisterInstance
、および DeregisterInstance
AWS Cloud Map API を呼び出します。これらはサービス検出を支援し、タスクを起動するとヘルスチェックを実行します。多数のタスクを伴うサービス検出を使用する複数のサービスを同時にデプロイすると、AWS Cloud Map API のスロットリング制限を超える可能性があります。この場合、Amazon ECS サービスのイベントメッセージに次のようなメッセージが表示される場合があります: Amazon ECS サービスイベントで Operations are being throttled. Will try again later
が発生しました。デプロイとタスクの起動速度が遅くなっています。AWS Cloud Map には、これらの API のスロットリング制限は記録されていません。これらのスロットリングが発生した場合は、API のスロットリング制限を引き上げる方法について サポート までお問い合わせください。これらのスロットリングエラーの監視とトラブルシューティングに関する推奨事項については、「Amazon ECS のスロットリングに関する問題を処理する」を参照してください。