HULFT 10 for Container Servicesでスケーリングをやってみた

# はじめに
こんにちは、すぎもんです:smile:

いわゆる「コンテナ版HULFT」であるHULFT10 for Container Servicesを少しずつ触っております。今回はHULFT10 for Container Servicesでスケーリングをやってみます。

HULFT10 for Container Servicesのスケールはデータプレーンによって異なります。データプレーンがEC2の場合はEC2をスケールする方法とECSのタスクをスケールする方法がありますが、データプレーンがFargateの場合はECSのタスクをスケールする方法のみとなっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/abddc4ce-d967-af73-f25e-9d9904a447ae.png)

:::note info
**EC2とFargateのスケーリングの違いについて**
ECS on Fargateは実行環境のスケーリング設定が不要です。データプレーンがEC2の場合はEC2のスケーリング設定が必要ですが、 Fargateの場合は実行環境のスケーリングを意識する必要がなく、ユーザはECSのスケーリング設定をするだけです。
:::

***********************************
#### 過去記事
[HULFT10 for Container Services で Amazon EFS内の実ファイルを確認してみる](https://qiita.com/sugimon/items/8de650df0632825d70ff)
[HULFT10 for Container Servicesの監視アラームをSlackに通知してみた](https://qiita.com/sugimon/items/669ed9ddc5ff1d1a4d6f)
[HULFT10 for Container Servicesの運用監視のためにCloudWatchのダッシュボードを作成してみた](https://qiita.com/sugimon/items/c4af6d2be12154a570f0)
[CloudFormationによるAWSリソース作成時のエラーに対処してみた](https://qiita.com/sugimon/items/a8defd7631619e991f2f)
[HULFT10 for Container Services でHULFT Squareのスクリプト実行してみた](https://qiita.com/sugimon/items/010e64cc63a90fe36ab9)
[Slack通知をHULFT10 for Container Servicesでしてみた](https://qiita.com/sugimon/items/2060bce63fbce68f5905)
[HULFT10 for Container ServicesでWebAPI による配信要求をしてみた](https://qiita.com/sugimon/items/a841645df7fa21160ed8)
***********************************

# 今回やること　
今回はHULFT 10 for Container Servicesでの**スケジュールによるEC2のスケール（EC2のみ）** と**スケジュールによるタスクのスケール（EC2・Fargate共通）** を行います。

:::note info
**スケーリングの種類**
・起動するEC2インスタンス数を維持するスケール（EC2のみ）
**・スケジュールによるEC2のスケール（EC2のみ）<font color="Red">※今回やること</font>**
・EC2の手動スケール（EC2のみ）
・EC2の自動スケール（EC2のみ）
・EC2の予測スケール（EC2のみ）
・タスクの自動スケール（EC2・Fargate共通）
**・スケジュールによるタスクのスケール（EC2・Fargate共通）<font color="Red">※今回やること</font>**
:::

**■スケジュール指定のEC2のスケール**
→予定されたスケジュールに沿ってEC2の停止、起動。
**■スケジュール指定のタスクのスケール**
→予定されたスケジュールに沿ってタスクの追加、削除。

また、タスクの自動スケールはCPU使用率、NW負荷などの上限を超えた場合にタスクの追加、削除が実施されるようになります。

:::note info
**タスクとは**
ECSの構成要素で、アプリケーションを実行するコンテナ群のことです。アプリケーションの実行単位であり、1つ以上のコンテナから構成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/df486d32-df7a-ef7d-e95c-3600fea5a94c.png)
:::

# 実施手順
**＜スケジュールによるEC2のスケール（EC2のみ）＞**
① Auto Scaling Groupの選択
② Auto Scaling Groupに対するアクションの作成
③ Auto Scaling Groupに対するアクションの詳細設定
④ Auto Scaling Groupのアクションの確認
⑤ スケールインの設定

**＜スケジュールによるタスクのスケール（EC2・Fargate共通）＞**
① 使用するコマンド
② cron式の使用
③ スケジュールを追加
④ スケジュールを確認
⑤ スケジュールを削除


# スケジュールによるEC2のスケール（EC2のみ）
スケジュールにより、EC2をスケールするための設定を行います。
### ①　Auto Scaling Groupの選択
AWS Management Consoleのナビゲーションペイン「Auto Scalingグループ」を選択し、対象のAuto Scalingグループを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/23824442-92e0-fce1-a947-f6cccc2fa8a0.png)


### ②　Auto Scaling Groupに対するアクションの作成

右部の[オートスケーリング]タブの最下層にある「予定されたアクション」の「予定されたアクションを作成する」を押下します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/b262c2b8-9c86-15ec-4f99-2c9230f5c19e.png)


### ③　Auto Scaling Groupに対するアクションの詳細設定

下記の通り、スケーリングしたいスケジュール（日時情報など）を入力し、作成を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/6ac208fe-2db1-e678-fb64-7ac647b8668a.png)


### ④　Auto Scaling Groupのアクションの確認

「予定されたアクション」に③で作成したアクションが表示されます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/e57a819b-9c14-9411-414f-0141fb8ada4f.png)

### ⑤　スケールインの設定
①～④でスケールアウトの設定をした場合、スケジュールに則り性能を向上させます。
そのままだと性能が向上したままになるため、システム負荷が低下するタイミングでスケールインするようにスケジュールする必要があります。
そのため、①～④の手順を参考に別途スケールインの設定を行う必要があります。

# スケジュールによるタスクのスケール（EC2・Fargate共通）
スケジュール指定でタスクをスケールするための設定を行います。
### ①　使用するコマンド
よく使用するコマンドは以下になります。
| コマンド名 |　説明 | 
|:-----------|:------------|
|put-scheduled-action       | スケジュールを追加        | 
| describe-scheduled-actions     | スケジュールを確認      | 
| delete-scheduled-action    | スケジュールを削除        | 

:::note info
上記のコマンドを実行するためには、IAMで以下のアクションを許可する必要があります。
application-autoscaling:PutScheduledAction
application-autoscaling:DescribeScheduledActions
application-autoscaling:DeleteScheduledAction
:::


### ②　cron式の使用
定期的なスケジュールを作成する場合は以下のcron式を使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/722cb323-a9a4-60f4-498b-70050a9af4a0.png)

### ③　スケジュールを追加
スケジュールを追加する場合は以下のコマンドを実行します。
例）毎週金曜日の18:00にスケールアウトまたはスケールインするスケジュールを追加する場合の設定例は以下になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/bb85e37b-ce5f-8225-4fed-4d7e7a751bb2.png)

### ④　スケジュールを確認
スケジュールを確認する場合は以下のコマンドを実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/130f7239-053c-7e1b-1ccd-3d79b9f51de2.png)


### ⑤　スケジュールを削除
スケジュールを削除する場合は以下のコマンドを実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/caff7cd2-e6e8-c3e7-187d-52fbd11b0f14.png)


# 最後に
いかがでしたでしょうか。
スケーリングは、HULFTがコンテナ対応したことで得られるメリットの一つだと思います。
皆さんもHULFT 10 for Container Servicesを導入した際は、スケーリングの設定を行い運用負荷の軽減を計画してみてはいかがでしょうか。

このブログでは、今後も様々なTopics記事や接続検証等、皆さんの参考になるような記事を投稿していきたいと思います！
ここまで読んでいただきありがとうございました。それでは、また！:raised_hand: