Amazon ECS マネージドスケーリング動作 - Amazon Elastic Container Service

Amazon ECS マネージドスケーリング動作

マネージドスケーリングを使用する Auto Scaling グループキャパシティプロバイダーがある場合、Amazon ECS はクラスターに追加する最適なインスタンス数を見積もり、この値を使用してリクエストまたはリリースするインスタンス数を決定します。

マネージドスケールアウト動作

Amazon ECS は、サービス、スタンドアロンタスク、またはクラスターのデフォルトからのキャパシティープロバイダー戦略に従って、各タスクのキャパシティープロバイダーを選択します。Amazon ECS は、単一のキャパシティプロバイダーのために、これらの残りのステップに従います。

キャパシティプロバイダー戦略のないタスクはキャパシティプロバイダーによって無視されます。キャパシティプロバイダー戦略がない保留中のタスクによって、キャパシティプロバイダーがスケールアウトされることはありません。タスクまたはサービスが起動タイプを設定する場合、タスクまたはサービスはキャパシティプロバイダー戦略を設定できません。

以下では、スケールアウト動作について詳しく説明します。

  • このキャパシティプロバイダーのすべてのプロビジョニングタスクをグループ化し、各グループが同じリソース要件を持つようにします。

  • グループ内の複数のインスタンスタイプを使用する場合、Auto Scaling グループ内のインスタンスタイプはパラメータによってソートされます。これらのパラメータには vCPU、メモリ、Elastic Network Interface (ENI)、ポート、GPU が含まれます。各パラメータの最小インスタンスタイプと最大インスタンスタイプが選択されます。インスタンスタイプの選択方法の詳細については、「Amazon ECS 用の Amazon EC2 コンテナインスタンス」を参照してください。

    重要

    タスクのグループに、Auto Scaling グループの最小のインスタンスタイプよりも大きなリソース要件がある場合、そのタスクのグループは、このキャパシティプロバイダーでは実行できません。キャパシティプロバイダーは、Auto Scaling グループをスケールしません。タスクは PROVISIONING 状態のままです。

    タスクが PROVISIONING 状態にとどまらないようにするには、最小リソース要件ごとに個別の Auto Scaling グループとキャパシティプロバイダーを作成することをお勧めします。タスクを実行するか、サービスを作成するときは、Auto Scaling グループ内の最小インスタンスタイプでタスクを実行できるキャパシティプロバイダーのみをキャパシティプロバイダー戦略に追加します。他のパラメータでは、配置制約を使用できます

  • タスクグループごとに、Amazon ECS は未配置タスクの実行に必要なインスタンス数を計算します。この計算には、binpack 戦略が用いられます。この戦略では、タスクの vCPU、メモリ、Elastic Network Interface (ENI)、ポートや GPU の要件を考慮します。また、Amazon EC2 インスタンスのリソースの可用性も考慮されます。最大インスタンスタイプの値は、計算された最大インスタンス数として扱われます。最小のインスタンスタイプの値は、保護として使用されます。最小インスタンスタイプでタスクの少なくとも 1 つのインスタンスを実行できない場合、計算ではタスクが互換性がないと見なされます。その結果、タスクはスケールアウト計算から除外されます。すべてのタスクに最小のインスタンスタイプとの互換性がないときは、クラスター 自動スケーリングは停止し、CapacityProviderReservation 値は targetCapacity のままになります。

  • Amazon ECS は、次のいずれかに該当する場合、minimumScalingStepSize に関連した CloudWatch に CapacityProviderReservation メトリクスをパブリッシュします。

    • 計算された最大インスタンス数が最小スケーリングステップサイズを下回っています。

    • maximumScalingStepSize か、計算された最大インスタンス数のどちらか低い方の値。

  • CloudWatch アラームは、キャパシティプロバイダーの CapacityProviderReservation メトリクスを使用します。CapacityProviderReservation メトリクスが targetCapacity 値より大きい場合、アラームでは、Auto Scaling グループの DesiredCapacity も増加します。targetCapacity 値は、クラスターの自動スケーリングがアクティブ化されているフェーズ中に CloudWatch アラームに送信されるキャパシティプロバイダー設定です。

    デフォルトの targetCapacity は 100 % です。

  • Auto Scaling グループは追加の EC2 インスタンスを起動します。オーバープロビジョニングを防ぐため、Auto Scaling では、最近起動された EC2 インスタンスのキャパシティが新たなインスタンスを起動する前に安定させています。自動スケーリングは、既存のすべてのインスタンスが instanceWarmupPeriod (現在はインスタンスの起動時間を減じたもの) を経過したかどうかを確認します。instanceWarmupPeriod 内にあるインスタンスのスケールアウトはブロックされます。

    新しく起動されたインスタンスがウォームアップに達するまでのデフォルト秒数は 300 です。

詳細については、「Amazon ECS のクラスター自動スケーリングに関する詳細な説明」を参照してください。

スケールアウトの考慮事項

スケールアウトのプロセスでは、次の点を考慮してください。

  • 配置制約は複数ありますが、distinctInstance タスク配置の制約事項のみを使用することをお勧めします。サンプリングされたインスタンスと互換性がない配置制約を使用しているため、これにより、スケールアウトプロセスが停止するのを防ぐことができます。

  • マネージドスケーリングは、Auto Scaling グループが同じインスタンスタイプまたは類似のインスタンスタイプを使用している場合に最適です。

  • スケールアウトプロセスが必要で現在実行中のコンテナインスタンスがない場合は、Amazon ECS は常に 2 つのインスタンスにスケールアウトしてから追加のスケールアウト/インプロセスを実行します。追加のスケールアウトは、インスタンスのウォームアップ期間を待ちます。スケールインプロセスの場合、Amazon ECS はスケールアウトプロセスの後 15 分待ってから、常にスケールインプロセスを開始します。

  • 2 番目のスケールアウトのステップは instanceWarmupPeriod が期限切れになるまで待つ必要があるため、全体的なスケール制限に影響する可能性があります。この時間を短縮する必要がある場合は、instanceWarmupPeriod が EC2 インスタンスが Amazon ECS エージェントを起動して開始するのに十分な大きさであることを確認してください (オーバープロビジョニングを防げます)。

  • クラスターの自動スケーリングは、キャパシティプロバイダーの Auto Scaling グループ内の起動設定、起動テンプレート、複数のインスタンスタイプをサポートします。複数のインスタンスタイプを使用せずに、属性ベースのインスタンスタイプの選択も使用できます。

  • オンデマンドインスタンスと複数のインスタンスタイプ、またはスポットインスタンスを持つ Auto Scaling グループを使用する場合は、大きいインスタンスタイプを優先順位リストで上位に配置し、ウェイトを指定しないでください。現時点では、ウェイトの指定はサポートされていません。詳細については、AWS Auto Scalingユーザーガイドの「複数のインスタンスタイプと Auto Scaling グループ」を参照してください。

  • Amazon ECS は、計算された最大インスタンス数が最小スケーリングステップサイズより小さい場合は minimumScalingStepSize を、あるいは maximumScalingStepSize または計算された最大インスタンスカウント値のいずれか小さい方を起動します。

  • Amazon ECS サービスまたは run-task がタスクを起動し、キャパシティープロバイダーのコンテナインスタンスにタスクを開始するために十分なリソースがない場合、Amazon ECS は、各クラスターでこのステータスのタスク数を制限し、タスクがこの制限を超えることを防ぎます。詳細については、「Amazon ECS の Service Quotas」を参照してください。

マネージドスケールイン動作

Amazon ECS は、クラスター内の各キャパシティプロバイダーのコンテナインスタンスをモニタリングします。コンテナインスタンスがタスクを実行していない場合、コンテナインスタンスは空であるとみなされ、Amazon ECS はスケールインプロセスを開始します。

CloudWatch スケールインアラームは、Auto Scaling グループのスケールインプロセスが開始する前に 15 データポイント (15 分) を必要とします。スケールインプロセスがスタートされた後から Amazon ECS が登録されたコンテナインスタンス数を減らす必要があるまで、Auto Scaling グループは DesireCapacity 値を 1 つのインスタンスより大きく、かつ毎分 50% 未満に設定します。

Amazon ECS がスケールアウトをリクエストしたときに (CapacityProviderReservation が 100 より大きいとき) スケールインプロセスが進行中の場合、スケールインプロセスは停止して、必要に応じて最初から開始されます。

次では、スケールイン動作について詳しく説明します。

  1. Amazon ECS は、空のコンテナインスタンスの数を計算します。デーモンタスクが実行されている場合でも、コンテナインスタンスは空であるとみなされます。

  2. Amazon ECS では、CapacityProviderReservation 値を 0 ~ 100 の数値に設定します。この数値は、Auto Scaling グループが必要とする規模と実際の規模との比率をパーセンテージで表す次の式を使用します。その後、Amazon ECS は CloudWatch にメトリクスをパブリッシュします。メトリクスの算出方法の詳細については、「Amazon ECS クラスター自動スケーリングのDeep Dive」を参照してください。

    CapacityProviderReservation = (number of instances needed) / (number of running instances) x 100
  3. CapacityProviderReservation メトリクスは CloudWatch アラームを生成します。このアラームは Auto Scaling グループの DesiredCapacity 値を更新します。すると、以下のいずれかのアクションが発生します。

    • キャパシティプロバイダーによるマネージド終了を使用しない場合、Auto Scaling グループは、Auto Scaling グループ終了ポリシーを使用して EC2 インスタンスを選択し、EC2 インスタンス数が DesiredCapacity に達するまでインスタンスを終了します。その後、コンテナインスタンスがクラスターから登録解除されます。

    • すべてのコンテナインスタンスがマネージド型の終了保護を使用している場合、Amazon ECS は空のコンテナインスタンスのスケールイン保護を削除します。Auto Scaling グループは EC2 インスタンスを終了できるようになります。その後、コンテナインスタンスがクラスターから登録解除されます。