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

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

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

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

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

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

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

    注記

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

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

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

CapacityProviderReservation

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

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

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

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

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

CapacityProviderReservation の値は targetCapacity に等しいです

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

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

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

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

CapacityProviderReservation の値は targetCapacity 未満です

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

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

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

  • Amazon EC2 Auto Scaling グループが、スケーリングポリシーのあるキャパシティプロバイダー (Amazon ECS が管理しているポリシーを除く) に関連付けられている場合、グループ用に希望するキャパシティは変更および管理しないでください。

  • Amazon ECS が 0 インスタンスからスケールアウトする場合、自動的に 2 つのインスタンスを起動します。

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

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

    重要

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

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

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

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

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

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

クラスターの自動スケーリングをオンにする

コンソールまたは AWS CLI を使用して、クラスターの自動スケーリングをオンにすることができます。

コンソールを使用して EC2 キャパシティプロバイダーを使うクラスターを作成すると、Amazon ECS がユーザーに代わって Amazon EC2 Auto Scaling グループを作成し、ターゲット容量を設定します。詳細については、「Amazon EC2 ワークロード用の Amazon ECS クラスターを作成する」を参照してください。

ユーザーが Amazon EC2 Auto Scaling グループを作成してクラスターに割り当てることもできます。詳細については、「Amazon ECS キャパシティープロバイダーを更新する」を参照してください。

AWS CLI を使用する場合、クラスターを作成した後、次の手順に従います。

  1. キャパシティプロバイダーを作成する前に、Amazon EC2 Auto Scaling グループを作成する必要があります。詳細については、「Amazon EC2 Auto Scaling ユーザーガイド」の「Amazon EC2 Amazon EC2 Auto Scaling グループ」を参照してください。

  2. put-cluster-capacity-providers を使用して、クラスターキャパシティプロバイダーを変更します。詳細については、「Amazon ECS クラスターの自動スケーリングを有効にする」を参照してください。