【ECS】キャパシティプロバイダーを使ってみよう~設定編~

streampackのrisakoです。

2月中旬に入ってから花粉が一気に飛び始めましたね:evergreen_tree:
今年は去年よりも飛散量が多いようで花粉症の人にとっては辛い時期になってしまいました:mask:

今回は、ECSのキャパシティプロバイダについて書いて行きたいと思います。

## キャパシティプロバイダーとは
**「ECSにおけるタスク実行インフラを柔軟に設定できる仕組み」** です。
以下のECS設定で設定できますが、今回は「ECS　on EC2 」で設定してみたいと思います。

- ECS on EC2 
- ECS on Fargate 


ECS on EC2を利用したことがある方は、タスク数を変更する際にEC2インスタンスもスケールアウトする必要があったかと思います。
キャパシティプロバイダーを使うことで**タスク数に基づきEC2をインスタンスも自動でスケールアウト**してくれるので運用がとても楽になりますね:point_up:

#設定
##0. 事前準備
ECSクラスターに**タスク定義設定**と**タスク作成**できるようにしておく必要があります、
タスク作成ができないと、キャパシティプロバイダーを設定してもインスタンスの増減はできません。

## 1. AutoScaling Groupを新規に作成する。
ECS　on EC2で作成すると、自動でAutoScaling　Groupが作成されるかと思います。
そのAutoScaling Groupとは別に、キャパシティプロバイダー用に新規で作成する必要があります。

- 起動テンプレートではなく、**起動設定**で作成しましょう。
![スクリーンショット 2021-02-03 11.31.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429615/914531ad-1aa6-4109-ba6c-d6855395376a.png)

- ECSクラスター作成時に作成されているAuto Scalingグループを選択します
![スクリーンショット 2021-02-03 11.31.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429615/e331c132-c030-1ace-4dc5-f513f8f5d237.png)

- グループサイズは、最大キャパシティのみ設定します。
最大キャパシティを10にした場合は、キャパシティプロバイダーで自動スケールアウトされるインスタンスが10個までに制限されます。
![スクリーンショット 2021-02-03 11.55.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429615/f6b92e56-75ec-bf48-b62c-c70a31f08ee6.png)


## 2. キャパシティプロバイダー設定

- 対象ECSクラスターの「キャパシティプロバイダー」タブから作成しましょう
![スクリーンショット 2021-02-03 12.09.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429615/895ad469-2df2-e09a-2e01-5e384da18050.png)

| 項目| 値 | 備考 |
| --- | --- | --- |
| キャパシティプロバイダー名 | demo | 任意の名前を設定 |
| AutoScaling グループ |test-ecs  |先ほど作成したAutoScaling グループを選択 |
| マネージドスケーリング |有効 |有効になっていないとタスク数に応じた自動的なスケーリングは行われないので注意|
| ターゲットキャパシティー％ |100  | ECSで使用するインスタンスの必要数(1~100)。100=全てのインスタンスが無駄なく使用される。50=本来必要なインスタンス数の倍作成する。（突発的なアクセス増加に対応できる） |
| マネージドターミネーション 保護|無効  |スケールインから保護するインスタンスがある場合には有効にする。  |

## 3.クラスターの変更
- クラスター右上にある「クラスターの変更」を押下します。
![スクリーンショット 2021-02-03 13.01.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429615/478dfea3-c9f9-144e-c545-ef16c4b6e0bb.png)

- 「**デフォルトのキャパシティプロバイダー戦略**」を、作成したキャパシティプロバイダーに設定します。
![スクリーンショット 2021-02-03 13.02.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429615/d4457fca-77f7-b1be-a06c-a120bbadbc59.png)

新規作成したAutoScaling Groupで以下のようなポリシーが作成されていれば、キャパシティプロバイダーの設定がされています。
![スクリーンショット 2021-02-03 18.15.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429615/d455d4f5-01da-75cf-dfcd-adbff8d7e3a5.png)

## 4.サービス作成 
今回は、サービスを新規作成する場合を想定しています。

- サービスタブの「作成」から新規作成します
- 「 起動タイプ」ではなく、「**キャパシティプロバイダー戦略**」で設定します

![スクリーンショット 2021-02-03 12.35.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429615/098c390c-94b5-05f8-d523-3b6404a578f8.png)

| 項目| 値 | 備考 |
| --- | --- | --- |
| キャパシティプロバイダー戦略 | Cluster default strategy | 作成したキャパシティプロバイダーが選択されていることを確認 |
| タスク定義 |app  |使用するタスク定義を選択する  |
| クラスター |ECSクラスター名 |  |
| サービス名 |demo  |任意のサービス名  |
| サービスタイプ |REPLICA  |  |
| タスクの数 |2  |タスクの数を変更するとキャパシティプロバイダーによりECSインスタンスが増減されます |

- 次のページで使用するロードバランサーを指定します。

- Service AutoScaling（オプション）では、**「Service AutoScaling の設定を変更することで、サービスの必要数を調整する」**を選択

- タスクの最小数・必要数・最大数を設定します

![スクリーンショット 2021-02-03 12.51.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429615/cee879eb-abe6-bca9-81eb-a9e4a82dfc1b.png)

以上でキャパシティプロバイダーの設定は完了です！
タスク数を増減させて自動でスケールアウトされるのか試してみましょう。

##まとめ
頻繁にECS on EC2でスケールアウトやスケールインすることがある場合はとても楽に運用できる印象でした。

今回もお読み頂きありがとうございました。