AWS ECS(fargate)のコンテナオートスケーリングと動作確認

はじめに

ECS(fargate)のオートスケーリングってどんな動きをするんだろう。
試してみよう!

構成

image.png

前提条件

クライアントマシン(自分のローカルPC)に以下がインストールされていること。
・docker
・JMeter

クライアントマシンはwindows 10(64bit)を利用

では、やっていきましょう

【AWS】:AWSコンソールでの作業
【local】:クライアントマシンでの作業

ECRの作成【AWS】

誰でもできるので割愛します。
※アクセス許可設定お忘れなく。

ELBの作成【AWS】

誰でもできるので割愛します。
※ELBセキュリティグループのinbound 8080 は開けておいてください。

ECSの作成【AWS】

今回は、fargateを利用するので、リージョンは「バージニア北部」を利用します。
クラスターテンプレートは以下を利用
image.png

VPCは本記事では記載しませんが、一般的なパブリックサブネットを利用します。
image.png

dockerイメージ(httpd)の作成【local】

コマンドプロンプトで実行
docker pull httpd

image.png

動かしてみる
docker run -d -p 8080:80 httpd
image.png

以下をwebブラウザに入力して確認
http://localhost:8080/

動いてますね。
image.png

dockerイメージをECRに投入【local】

・ECRにログイン
コマンドプロンプトで以下実行
aws ecr get-login --no-include-email --region us-east-1

↑のコマンドで取得したloginコマンドをさらに実行

dockerイメージへのタグ付け
docker tag httpd:latest xxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/osak:httpd

ECRへのpush
docker push xxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/osak:httpd

ECRへの投入が完了しました。
image.png

ECSでタスク定義の作成【AWS】

ECRのdockerイメージをベースにしたタスクを作ります。
image.png

image.png

必要なメモリ量とcpuの設定する。

image.png

コンテナ追加時に、先程ECRに登録したdockerイメージを設定する。
コンテナポートは80を指定。

image.png

ECSでサービスの作成【AWS】

作成したタスクを動かすためのサービスを作成する。
image.png

ネットワーク構成
 VPCとセキュリティグループについては、適当なパブリックサブネットを選択。
 本記事には明記しません。

ロードバランサー設定
image.png

ロードバランサーのドメインの8080ポートにアクセスが来た場合、
コンテナの80ポートに流す設定をする。

image.png

オートスケーリング設定
image.png

今回は、CPU使用率が30%を超えたらオートスケーリングするよう設定します。

image.png

動作確認①【local】

以上でECS(fargate)上にhttpdのコンテナが立ち上がるようになっています。
早速クライアントマシンから確認してみましょう。

webブラウザに以下urlを入力します。

http://<サービスで設定したELBのドメイン>:8080/
※サンプル
http://xxxxxxxxxxxxxxxxxx.us-east-1.elb.amazonaws.com:8080/

ブラウザに以下が表示されればOK
image.png

準備は完了。
オートスケーリングさせてみましょう。

JMeterで負荷をかける【local】

以下を参考

https://www.skyarch.net/blog/?p=12594

・スレッドグループ作成

image.png

・HTTPリクエスト設定
「サーバ名またはIP」にはELBのドメイン名を入力
image.png

「結果をツリーで表示」「統計レポート」を追加。

動作確認②【AWS】【local】

これで、全ての準備が整いました。
さっそく爆撃してオートスケーリングを確認していきましょう。

■初期状態

image.png

JMeterの再生ボタンを押下。
大量のHTTPリクエスト(GET)処理が走ります。
image.png

■数分後
Cloudwatchにてアラームが発生します。

image.png

コンテナの数が、自動で3に増えました。

image.png

一度はCPU50%を超えていましたが、
オートスケーリングにより、CPUが安定しました。

image.png

■JMeterを停止後
自動で元の性能にもどりました。

image.png

まとめ

・オートスケーリングの手軽さが凄い
EC2クラスターの場合は、EC2のスケーリングも考えなければなりませんでしたが、
fargateの場合は、単純にタスクにいくらCPU・メモリを割り当てるか。
どこまでコンテナを増やすかに注力できるので非常に便利そうです。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.