クラスターの自動スケーリングで Amazon ECS キャパシティーを自動的に管理する - Amazon Elastic Container Service

クラスターの自動スケーリングで Amazon ECS キャパシティーを自動的に管理する

Amazon ECS では、クラスターに登録された Amazon EC2 インスタンスのスケーリングを管理できます。これは、Amazon ECS クラスターの自動スケーリングと呼ばれます。Amazon ECS Auto Scaling グループのキャパシティープロバイダーを作成するときに、マネージドスケーリングを有効にします。その後、この Auto Scaling グループのインスタンス使用率のターゲットパーセンテージ (targetCapacity) を設定します。Amazon ECS は 2 つのカスタム CloudWatch メトリクス、および Auto Scaling グループに対するターゲット追跡スケーリングポリシーを作成します。また、Amazon ECS は、タスクが使用するリソース使用率に基づいて、スケールインアクションとスケールアウトアクションを管理します。

クラスターに関連付けられている各 Auto Scaling グループのキャパシティプロバイダーについて、Amazon ECS は次のリソースを作成し、管理します。

  • 低いメトリクス値の CloudWatch アラーム

  • 高いメトリクス値の CloudWatch アラーム

  • ターゲットの追跡スケーリングポリシー

    注記

    Amazon ECS は、ターゲットの追跡スケーリングポリシーを作成し、Auto Scaling グループにアタッチします。ターゲットの追跡スケーリングポリシーを更新するには、スケーリングポリシーを直接更新するのではなく、キャパシティプロバイダーのマネージドスケーリング設定を更新します。

マネージドスケーリングを無効にするか、クラスターからキャパシティプロバイダーの関連付けを解除すると、Amazon ECS は CloudWatch メトリクスとターゲットの追跡スケーリングポリシーのリソースの両方を削除します。

Amazon ECS では、実行するアクションを決定するのに次のメトリクスを使用します。

CapacityProviderReservation

特定のキャパシティプロバイダーで使用されているコンテナインスタンスの割合。Amazon ECS はこのメトリクスを生成します。

Amazon ECS は、CapacityProviderReservation の値を 0~100 の数値に設定します。Amazon ECS は、次の式を使用して Auto Scaling グループに残っているキャパシティの割合を表します。その後、Amazon ECS は CloudWatch にメトリクスをパブリッシュします。メトリクスの算出方法の詳細については、「Amazon ECS クラスター自動スケーリングを詳しく知る」を参照してください。

CapacityProviderReservation = (number of instances needed) / (number of running instances) x 100
DesiredCapacity

Auto Scaling グループのキャパシティ量。このメトリクスは CloudWatch に公開されていません。

Amazon ECS は AWS/ECS/ManagedScaling 名前空間内の CloudWatch に CapacityProviderReservation メトリックを公開します。CapacityProviderReservation メトリクスは、次のいずれかのアクションを実行します。

CapacityProviderReservation の値は targetCapacity に等しいです

Auto Scaling グループはスケールインまたはスケールアウトする必要はありません。目標使用率に達しました。

CapacityProviderReservation の値は targetCapacity より大きいです

キャパシティのパーセンテージを使用しているタスクの数が、自分の targetCapacity のパーセンテージを上回っています。CapacityProviderReservation メトリクスの値が増加すると、関連する CloudWatch アラームが動作します。このアラームは Auto Scaling グループの DesiredCapacity 値を更新します。Auto Scaling グループはこの値を使用して EC2 インスタンスを起動し、クラスターに登録します。

targetCapacity がデフォルト値の 100% の場合、インスタンスにタスクを実行できる空き容量がないため、スケールアウト中は新しいタスクは PENDING 状態になります。新しいインスタンスが ECS に登録されると、これらのタスクは新しいインスタンスで開始されます。

CapacityProviderReservation の値は targetCapacity 未満です

キャパシティのパーセンテージを使用しているタスクが自分の targetCapacity のパーセンテージよりも少なく、終了できるインスタンスが少なくとも 1 つあります。CapacityProviderReservation メトリクスの値が減少すると、関連する CloudWatch アラームが動作します。このアラームは Auto Scaling グループの DesiredCapacity 値を更新します。Auto Scaling グループはこの値を使用して EC2 コンテナインスタンスを終了し、クラスターから登録解除します。

Auto Scaling グループは、終了ポリシーを使用して、スケールインイベント中に最初に終了するインスタンスを決定します。さらに、インスタンスのスケールイン保護の設定は、回避します。クラスター自動スケーリングでは、マネージドターミネーション保護を有効にすると、どのインスタンスにインスタンススケールイン保護が設定されているかを管理できます。終了保護の詳細については、「Amazon ECS が終了するインスタンスの制御」を参照してください。詳細については、Amazon EC2 Auto Scaling ユーザーガイドの「スケールイン時にどの自動スケーリングインスタンスを終了するかのコントロール」を参照してください。

クラスターの自動スケーリングを使用するときは、次の点を考慮してください。

  • キャパシティプロバイダーに関連付けられている Auto Scaling グループが希望するキャパシティは、Amazon ECS が管理しているもの以外のスケーリングポリシーを変更または管理しないでください。

  • Amazon ECS は、ユーザーに代わって AWS Auto Scaling を呼び出すために必要なアクセス許可として AWSServiceRoleForECS サービスにリンクされた IAM ロールを使用します。詳細については、「Amazon ECS のサービスリンクロールの使用」を参照してください。

  • Auto Scaling グループでキャパシティプロバイダーを使用する場合、キャパシティプロバイダーを作成するユーザー、グループ、ロールには autoscaling:CreateOrUpdateTags アクセス許可が必要です。これは、Auto Scaling グループが、キャパシティープロバイダーに関連付けるときに、Amazon ECS が Auto Scaling グループにタグを追加するためです。

    重要

    ツールの使用により AmazonECSManaged タグが Auto Scaling グループから削除されないようにしてください。このタグが削除されると、Amazon ECS はスケーリングを管理できません。

  • クラスターの自動スケーリングは、グループの [MinimumCapacity][MaximumCapacity] を変更しません。グループをスケールアウトするには、[MaximumCapacity] を 0 より大きくする必要があります。

  • 自動スケーリング(マネージドスケーリング) がオンになっている場合、キャパシティプロバイダーは、同時に 1 つのクラスターにしか接続できません。キャパシティープロバイダーがマネージドスケーリングをオフにしている場合は、複数のクラスターに関連付けることができます。

  • マネージドスケーリングがオフの場合、キャパシティプロバイダーはスケールインまたはスケールアウトを実行しません。キャパシティプロバイダー戦略を使用して、キャパシティプロバイダー間でタスクのバランスを取ることができます。

  • binpack 戦略は、キャパシティに関して最も効率的な戦略です。

  • ターゲットキャパシティが 100% 未満の場合、配置戦略では binpack 戦略よりも上位の spread 戦略がない binpack 戦略を使用する必要があります。こうすることで、各タスクにハードウェア専有インスタンスが割り当てられるか、上限に達するまで、キャパシティプロバイダーはスケールアウトできなくなります。