クラスターの自動スケーリングで 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
戦略を使用する必要があります。こうすることで、各タスクにハードウェア専有インスタンスが割り当てられるか、上限に達するまで、キャパシティプロバイダーはスケールアウトできなくなります。