AWSで分散負荷テストをやってみた

2023.04.11
AWSで分散負荷テストをやってみた
この記事をシェアする

はじめに

こんにちは、スカイアーチHRソリューションズのsugawaraです!

先日、はじめてアプリケーションの負荷テストを実施する機会がありました。負荷テストとは、アプリケーションがどれだけの量のユーザーやトランザクションに対応できるかを測定するためのテストです。

よく利用されるツールとしてApache JMeterなどが挙げられますが、今回は自分が利用したAWSの分散負荷テスト(Distributed Load Testing on AWS)を紹介します。

AWSの分散負荷テスト

特徴

分散負荷テスト(Distributed Load Testing on AWS)は、AWSが公式に提供するソリューションとなります。主な特徴として、下記の点が挙げられます。

  • 負荷テスト実行環境を簡単に構築
  • コンテナを利用したサーバレス環境での大規模なテスト
  • JMeterスクリプトによるカスタマイズ

構成図

全体の構成は下記のようになっています。なお、構成図はこちらの公式サイトにあるものを転載しております。

下記が本アーキテクチャの大まかな流れとなります。CloudFormationテンプレートやアーキテクチャの詳細説明はこちらの公式サイトをご確認ください。

  1. AWS Amplifyによる管理画面は、Amazon S3バケットにデプロイされ、Amazon CloudFrontによりセキュアなパブリックアクセスを提供
  2. Amazon API Gateway APIでAWS Lambda関数のマイクロサービスを呼び出してテストを実行
  3. マイクロサービスは、テストデータを管理し、Amazon S3、DynamoDB、AWS Step Functionsと通信して、テストシナリオを実行
  4. テストシナリオを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 UpConcurrency 数に達するまでの時間
Hold forConcurrency 数を保持する時間(継続時間)
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ですぐに実行環境を構築できるのは嬉しいですが、実際に負荷テストをする場合には十分に注意してください。あくまで負荷テストを実施可能な対象にのみ実施をお願いします!

この記事をシェアする
著者:sugawara
元高校英語教員。2023 Japan AWS All Certifications Engineers。IaCやCI/CD、Platform Engineeringに興味あり。