AWSで分散負荷テストをやってみた
目次
はじめに
こんにちは、スカイアーチHRソリューションズのsugawaraです!
先日、はじめてアプリケーションの負荷テストを実施する機会がありました。負荷テストとは、アプリケーションがどれだけの量のユーザーやトランザクションに対応できるかを測定するためのテストです。
よく利用されるツールとしてApache JMeterなどが挙げられますが、今回は自分が利用したAWSの分散負荷テスト(Distributed Load Testing on AWS)を紹介します。
AWSの分散負荷テスト
特徴
分散負荷テスト(Distributed Load Testing on AWS)は、AWSが公式に提供するソリューションとなります。主な特徴として、下記の点が挙げられます。
- 負荷テスト実行環境を簡単に構築
- コンテナを利用したサーバレス環境での大規模なテスト
- JMeterスクリプトによるカスタマイズ
構成図
全体の構成は下記のようになっています。なお、構成図はこちらの公式サイトにあるものを転載しております。
下記が本アーキテクチャの大まかな流れとなります。CloudFormationテンプレートやアーキテクチャの詳細説明はこちらの公式サイトをご確認ください。
- AWS Amplifyによる管理画面は、Amazon S3バケットにデプロイされ、Amazon CloudFrontによりセキュアなパブリックアクセスを提供
- Amazon API Gateway APIでAWS Lambda関数のマイクロサービスを呼び出してテストを実行
- マイクロサービスは、テストデータを管理し、Amazon S3、DynamoDB、AWS Step Functionsと通信して、テストシナリオを実行
- テストシナリオをAWS Fargateで実行(Amazon ECSコンテナ内のTaurus負荷テストコンテナイメージを使用)し、結果CloudWatchへ
AWSの分散負荷テストの概要がつかめたと思いますので、次は実際に環境構築してテストを実施していきます。
実施手順
スタックのデプロイ
まずはスタックのデプロイからです。AWSコンソールにログインした状態で、 下記の公式サイト の「AWS コンソールで起動する」を押下します。
CloudFormationの画面に遷移後、下記の2点を確認し、問題がなければ次へ。
- デプロイしたいリージョンであること
- テンプレートソースにAWS公式のS3 URLが入力済みであること
詳細設定画面では、プロジェクトに合わせてスタック名を入力します。
パラメータで必須なのでは、Console Administrator Name(管理者名)とConsole Administrator Email(管理者Eメール)です。こちらは実際の管理画面にログイン時に必要になります。その他はデフォルトのままデプロイしましょう。デプロイにはおよそ10-15分ほどかかります。
デプロイ完了後、登録した管理者Eメールに下記のようなメールが届きます。これで準備完了です。
なお、登録したユーザ情報はCognitoのコンソール画面から確認が出来ます!
管理画面へログイン
メールに記載されているコンソールURLを押下してログイン画面へ遷移します。スタック作成時に入力したUsernameとPasswordを入力してログインしましょう。ログイン後、パスワードの再設定画面に遷移するので新しいパスワードを設定してください。
パスワードの再設定が完了したら、管理画面へ遷移します。こちらに今度実行したテストが一覧表示されます。とてもわかりやすいシンプルなUIですね。フロントエンドはAWS AmplifyとS3による静的サイトで構成されています。
負荷テストの実施
実際に負荷テストを実施するには、ヘッダー部分の「CREATE TEST」を押下しましょう。下記のような画面になりましたら、負荷試験を実施したいエンドポイントを指定して、各種設定をしていきます。なお、オプションのHTTP Headersでcookie情報を渡すことも可能です。
入力が必要な項目は下記の通りになります。必要な負荷と時間を設定してください。また、日時指定やテスト中のライブデータの観測も可能です。リアルタイムで観測したい方は、「Include Live Data」にチェックを入れてみてください!設定の完了後、「RUN NOW」を押下すると、負荷テストが始まります。
項目名 | 説明 |
---|---|
Name | 任意の名前(Dashboardに表示) |
Description | 任意の説明 (Detailsに表示) |
Task Count | タスク数 |
Concurrency | 同時接続数(仮想ユーザ数) |
Ramp Up | Concurrency 数に達するまでの時間 |
Hold for | Concurrency 数を保持する時間(継続時間) |
HTTP endpoint under test | テストを実行するターゲット URL |
テスト結果
実行が完了すると、負荷テスト詳細画面に遷移します。上部が設定した内容で、下部が実際のテスト結果ですね。ログインしていれば、テスト結果をワンクリックでS3に保存することもできてとても便利です!
画面下部のテスト結果ですが、グラフで表示されるため、視覚的でわかりやすいですね。項目が多いため、こちらも簡単に説明を載せておきます。必要があればご参照ください。
項目名 | 説明 |
---|---|
Average response time | すべてのリクエストの平均応答時間 (秒) |
Average latency | すべてのリクエストの平均レイテンシー (秒) |
Average connection time | すべてのリクエストについて、ホストへの接続にかかった平均時間 (秒) |
Average bandwidth | すべてのリクエストの平均帯域幅 |
Total Count | リクエストの総数 |
Success Count | 成功したリクエストの総数 |
Error Count | エラーの総数 |
Requests Per Second | すべてのリクエストの 1 秒あたりの平均リクエスト数 |
Percentile | テストの応答時間のパーセンタイル値 (最大応答時間は 100 %、最小は 0 %) |
おわりに
今回はAWSが提供する分散負荷テスト(Distributed Load Testing on AWS)を紹介しました。もし負荷テストを実施することがあれば、ぜひ活用してみてください!
なお、CloudFormationですぐに実行環境を構築できるのは嬉しいですが、実際に負荷テストをする場合には十分に注意してください。あくまで負荷テストを実施可能な対象にのみ実施をお願いします!