AWS FargateでAutoScaleを試してみる

`AWS Fargate`でより強力になった`Auto Scaleing`を実施してみます。
AWS公式の[ブログ](https://aws.amazon.com/jp/blogs/news/automatic-scaling-with-amazon-ecs/ "")を参考に設定を実施しました。

[TerraformでECS環境の構築【オートスケール編】](http://christina04.hatenablog.com/entry/2016/09/07/193000 "")を参考にTerraformでも設定します。

# 旧ECSのAutoScale

コンテナインスタンス(`EC2`)縛りがありコレジャナイ感があります。
以下2つの`Auto Scale`設定が必要です。

+ コンテナインスタンスの`Auto Scale`
+ `ECS Service`の`Auto Scale`

![ECS.png](https://qiita-image-store.s3.amazonaws.com/0/73176/a8935b54-e25b-a786-1d31-cfaf301d0515.png)

# FargateのAutoScale

コンテナインスタンス(`EC2`)から解放され、ECS Cluster内でtaskを自在に配置できます。

+ ~~コンテナインスタンスの`Auto Scale`~~

が不要になりました。

![Fargate.png](https://qiita-image-store.s3.amazonaws.com/0/73176/1bd78673-860e-eb46-c3fd-6d4e7c44f930.png)

# Terraformで設定

以下で一気に作成します。
https://github.com/Thirosue/terraform-sample/tree/master/aws_fargate

ECSとの差分は以下と比較ください。
https://github.com/Thirosue/terraform-sample/tree/master/aws_ecs

+ プロビジョニング

```bash
$ cd /path/to/directory/aws_fargate
$ cat terraform.tfvars
access_key="[アクセスキー記載]"
secret_key="[シークレットキーを記載]"
aws_id="[AWS IDを記載]"
$ terraform plan
$ terraform apply
```

+ 破棄

```bash
$ terraform destroy
```

# マネジメントコンソールで設定

## Fargate起動

[前回記事](https://qiita.com/takeshi_hirosue/items/90051144aae8bb5a646f "")を参考に実施。

+ 実施後のサービスの状態

![Service更新.png](https://qiita-image-store.s3.amazonaws.com/0/73176/4db30678-8553-d6c7-cb7d-4255ba7b34f4.png)

## `CloudWatch Alarm`設定

AWS公式の[ブログ](https://aws.amazon.com/jp/blogs/news/automatic-scaling-with-amazon-ecs/ "")を参考に実施

+ 実施後のアラーム状態

> CPU利用率は低いため、`ScaleIn`がアラーム状態で、`ScaleOut`がOKの状態

![CloudWatchAlarm設定.png](https://qiita-image-store.s3.amazonaws.com/0/73176/1da0423e-7de5-7360-1ea9-4d112e2275d0.png)

## `ECS Service　AutoScale`設定

AWS公式の[ブログ](https://aws.amazon.com/jp/blogs/news/automatic-scaling-with-amazon-ecs/ "")を参考に実施

+ `Service`の更新

![Service更新.png](https://qiita-image-store.s3.amazonaws.com/0/73176/f4f52cee-4332-9313-72e3-e3794054aa8e.png)

+ `Auto Scaling Policy`設定

> 作成した`Alarm`を選択し、クールダウン期間はテスト用に60秒に修正
> 以下同様に、`ScaleInPolicy`も作成

![AutoScalePolicy設定.png](https://qiita-image-store.s3.amazonaws.com/0/73176/577c6786-0cc5-f079-1b81-83c493322280.png)

+ 設定後の`Auto Scaling`の状態

> タスクの最大数も調整の上、更新する

![ServiceのAutoScale.png](https://qiita-image-store.s3.amazonaws.com/0/73176/9854a905-6dff-8d1e-9f41-e401a3e7809a.png)

## 負荷を掛ける

> `Apache Bench`等で負荷を掛けて、`ScaleOutAlarm`を発火させます。
> 必要に応じ、セキュリティグループの調整も実施してください。

```:bash
$ ab -n 1000000 -c 1000 http://fargate-nginx-alb-XXXXXXXXXXXX.us-east-1.elb.amazonaws.com/
```

+ `ScaleOut`が発火した状態

![ScaleOut発火.png](https://qiita-image-store.s3.amazonaws.com/0/73176/a523d312-a435-5046-36d6-9926b591c94c.png)

+ `task`が2つ`RUNNING`になります

![サービス2つRunning.png](https://qiita-image-store.s3.amazonaws.com/0/73176/4cdf70a8-17de-0531-8b2d-95fbd7c62efa.png)

## アクセス停止

> CPU利用率が低下し、`ScaleInAlarm`が発火して、taskが停止します。

+ `AutoScale`履歴

> `Alarm`による`start`及び`stop`の履歴が参照できる。

![AutoScale履歴.png](https://qiita-image-store.s3.amazonaws.com/0/73176/06e0ad0c-4dcb-764e-de14-86e9cc65e3ab.png)

+ `task`が1つ（再小数）`RUNNING`に戻る

![サービス1つRunning.png](https://qiita-image-store.s3.amazonaws.com/0/73176/0f0cca62-423b-e2c7-9ae9-1b0231a0e5ba.png)

## 最後に

旧`ECS`では苦労した、`Auto Scale`があっさり制約なしで実現できるようになりました。
東京リージョン上陸が待ち遠しいですね。