

# クラスターの自動スケーリングで Amazon ECS キャパシティーを自動的に管理する
<a name="cluster-auto-scaling"></a>

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 クラスター自動スケーリングを詳しく知る](https://aws.amazon.com/blogs/containers/deep-dive-on-amazon-ecs-cluster-auto-scaling/)」を参照してください。  

```
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 が終了するインスタンスの制御](managed-termination-protection.md)」を参照してください。詳細については、*Amazon EC2 Auto Scaling ユーザーガイド*の「[スケールイン時にどの自動スケーリングインスタンスを終了するかのコントロール](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-instance-protection.html)」を参照してください。

クラスターの自動スケーリングを使用するときは、次の点を考慮してください。
+ キャパシティプロバイダーに関連付けられている Auto Scaling グループが希望するキャパシティは、Amazon ECS が管理しているもの以外のスケーリングポリシーを変更または管理しないでください。
+ Amazon ECS が 0 インスタンスからスケールアウトする場合、自動的に 2 つのインスタンスを起動します。
+ Amazon ECS は、ユーザーに代わって AWS Auto Scaling を呼び出すために必要なアクセス許可として `AWSServiceRoleForECS` サービスにリンクされた IAM ロールを使用します。詳細については、「[Amazon ECS のサービスリンクロールの使用](using-service-linked-roles.md)」を参照してください。
+ Auto Scaling グループでキャパシティプロバイダーを使用する場合、キャパシティプロバイダーを作成するユーザー、グループ、ロールには `autoscaling:CreateOrUpdateTags` アクセス許可が必要です。これは、Auto Scaling グループが、キャパシティープロバイダーに関連付けるときに、Amazon ECS が Auto Scaling グループにタグを追加するためです。
**重要**  
ツールの使用により `AmazonECSManaged` タグが Auto Scaling グループから削除されないようにしてください。このタグが削除されると、Amazon ECS はスケーリングを管理できません。
+ クラスターの自動スケーリングは、グループの **[MinimumCapacity]** と **[MaximumCapacity]** を変更しません。グループをスケールアウトするには、**[MaximumCapacity]** を 0 より大きくする必要があります。
+ 自動スケーリング(マネージドスケーリング) がオンになっている場合、キャパシティプロバイダーは、同時に 1 つのクラスターにしか接続できません。キャパシティープロバイダーがマネージドスケーリングをオフにしている場合は、複数のクラスターに関連付けることができます。
+ マネージドスケーリングがオフの場合、キャパシティプロバイダーはスケールインまたはスケールアウトを実行しません。キャパシティプロバイダー戦略を使用して、キャパシティプロバイダー間でタスクのバランスを取ることができます。
+ `binpack` 戦略は、キャパシティに関して最も効率的な戦略です。
+ ターゲットキャパシティが 100% 未満の場合、配置戦略内では、`binpack` 戦略が `spread` 戦略よりも高い優先順位を持つ必要があります。こうすることで、各タスクにハードウェア専有インスタンスが割り当てられるか、上限に達するまで、キャパシティプロバイダーはスケールアウトできなくなります。

## クラスターの自動スケーリングをオンにする
<a name="cluster-auto-scale-use"></a>

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

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

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

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

1. キャパシティプロバイダーを作成する前に、Auto Scaling グループを作成する必要があります。詳細については、「*Amazon EC2 Auto Scaling ユーザーガイド*」の「[Auto Scaling グループ](https://docs.aws.amazon.com/autoscaling/ec2/userguide/auto-scaling-groups.html)」を参照してください。

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