負荷テストを実行したいけど,ラップトップや Amazon EC2 インスタンス1台から実行すると負荷テストを実行する側がボトルネックになってしまって,期待した負荷テストにならないという悩みはよくあると思う🔥
そこで負荷テスト専用の SaaS などを活用して負荷テストを実現する案もあるけど,AWS では「AWS ソリューションライブラリ(サービスではない)」として負荷テストを実行・管理する「Distributed Load Testing on AWS (DLT)」が提供されている❗️
僕自身は2年ほど前に Distributed Load Testing on AWS (DLT) を検証したことがあるけど,最近 Distributed Load Testing on AWS (DLT) を体験するワークショップ(日本語🇯🇵)が公開されたらしく,復習も兼ねてさっそく試してみた❗️
- Distributed Load Testing on AWS とは
- ワークショップの準備
- DLT での負荷テスト - 単一 URL
- DLT での負荷テスト - JMeter シナリオ
- リソースの削除
catalog.us-east-1.prod.workshops.aws
試した感想
まず,Distributed Load Testing on AWS (DLT) がどのようにデプロイされるかを把握できるようになるなーと感じた💡Distributed Load Testing on AWS (DLT) はソリューションとして AWS CloudFormation テンプレートが公開されていてワンクリックでデプロイできるとは言え,多くのサービスを組み合わせて実現するため,全体像は理解しにくいと思う.実際に Distributed Load Testing on AWS (DLT) を試したくても複雑だから諦めたという話も聞いたことがある💨そういう場合はこのワークショップを活用して Distributed Load Testing on AWS (DLT) の素振りをしておけば,仕事で使うときに実戦投入しやすくなる❗️
そして「解説が充実している」のも素晴らしいポイントだと感じた💡JMeter とは?Taurus とは?という基本的な説明もあるし,負荷テストの結果から「どういう傾向が読み取れるか」という考察も丁寧にまとまっていた.ワークショップを進めることに集中しすぎると「結果が出てやったー」で次に進んでしまうこともあるけど,ちゃんと理解を深めながら進める工夫がされていて良かった❗️
さらに僕自身はワークショップ手順で試す "1回目" と "2回目" に加えて Task Count
/ Concurrency
/ Hold For
の値を変えてみて追加の実行をしてみたり,Distributed Load Testing on AWS (DLT) がどういう仕組みで動いているのかを調べたりという「追加課題」も考えて試してみた.時間があったらやってみるとさらに理解が深まると思う.例えば AWS Step Functions ステートマシンはよくできてて参考になる.
Distributed Load Testing on AWS (DLT) をもっと理解するには
日本語はなく英語になってしまうけど Distributed Load Testing on AWS (DLT) のドキュメント「Implementation Guide」に仕組みなどが詳しくまとまっていて,1度読んでおくと良いと思う.例えば,コスト的には1ヶ月で $30.90
程度だよ〜という情報や AWS サポートに問い合わせもできるよ〜という情報も載っている👀
実際のコードなどは GitHub に公開されている👀
他には AWS Architecture Blog や YouTube にも Distributed Load Testing on AWS (DLT) 関連情報が公開されている👀
ワークショップ実施ログ
今回負荷テストを実行する対象となる「TODO アプリケーション」をデプロイできた👌
AWS CDK でデプロイされてて,アプリケーションは Application Load Balancer (ALB) と Amazon ECS で実装されてる〜
Distributed Load Testing on AWS (DLT) の「管理画面」をデプロイできた👌
テストタイプ Single HTTP Endpoint を選んで /api/alltodo
API に対して GET リクエストの負荷テストを実行できた👌
- 1回目
- Task Count: 1
- Concurrency: 1
- 2回目
- Task Count: 5
- Concurrency: 5
テストタイプ JMeter を選んで /api/alltodo
API (GET) と /api/createtodo
API (POST) と /api/updatetodo/${id}
API (POST) に対してシナリオを使った負荷テストを実行できた👌
- 1回目
- Task Count: 1
- Concurrency: 4
- 2回目
- Task Count: 5
- Concurrency: 20
JMeter の統計レポート aggregate.csv
を Jupyter Notebook で可視化できた👌
誤植など
ワークショップ手順にフィードバックを送る方法が書かれてなく,試しながら気になった誤植をまとめておく📝
- 表記揺れ(
ToDo
とTodo
とtodo
) 所用時間
→所要時間
- 表記揺れ(
試験対象
とテスト対象
) 増設じます。
→増設します。
Sucess
→Success
するロール
→スクロール
面左
→画面左
Container Insighs
→Container Insights
まとめ
Distributed Load Testing on AWS (DLT) を体験するワークショップを試してみた❗️AWS で負荷テスト環境を構築したくて Distributed Load Testing on AWS (DLT) を導入したいけど,どうやって活用するのかわからないという人に最適な入門コンテンツだった.所要時間としては2,3時間あれば終わると思う🕐
ちなみに今回ワークショップを実施してみて,環境削除は少し面倒だった.デプロイするときは AWS CloudFormation で一発なのに,削除時は DeletionPolicy の設定で残ってしまうリソースも多くポチポチと削除する必要があった.削除用のスクリプトまで用意されてたらもっと嬉しいのになぁ〜💨 あと最終的には ap-northeast-1 リージョンでワークショップを実施したけど,最初 us-east-1 リージョンで構築しようとしたら AWS CloudFormation で DltWorkshopTargetStack
スタックの作成に失敗して削除もうまくできず,スタックが DELETE_FAILED
状態で残ってしまったりもして環境構築も少し苦労した🔥
まとめると Distributed Load Testing on AWS (DLT) ワークショップおすすめでーす \( 'ω')/