Locust Cloud を使って AWS クラウド環境に負荷テストをやってみた

Locust Cloud を使って AWS クラウド環境に負荷テストをやってみた

2025.10.24

Locust Cloudは、負荷テスト用のサーバーを準備する必要がなく、アカウント登録だけですぐにテストを開始できました。こんにちは!製造ビジネステクノロジー部の小林です。

みなさんは負荷テストツールというと、どのようなツールを思い浮かべますか?

私は最近、先輩から「Locust」という負荷テストツールを教えてもらい、興味を持ちました。今回はこの Locust についての調査・検証を行いました。

Locustとは?

Locustは、Pythonで書かれたオープンソースの負荷テストツールです。Locustは英語で「イナゴ」を意味します。公式ドキュメントによると、以下のような特徴があります。
https://docs.locust.io/en/stable/what-is-locust.html

1. Pythonコードでシナリオを記述

  • 通常のPythonコードでテストシナリオを記述できるため、プログラマーにとって直感的

2.分散実行に対応

  • 複数のマシンから同時に負荷をかけることが可能
  • 数千、数万の同時ユーザーをシミュレート可能

3. Webベースのリアルタイムモニタリング

  • ブラウザから負荷テストの状況をリアルタイムで確認
  • スループット、レスポンスタイム、リクエスト数、失敗率などを可視化

Locust と Locust Cloud があるらしい

公式ドキュメントを見ていくと、Locust Cloudなるものが記載されていました。
https://www.locust.cloud/

Locust Cloud とは?

Locustの開発元が提供するマネージドクラウドサービスです。
負荷テストの環境構築や運用管理を不要にした、有料の Locust になります。

Locust と Locust Cloud の違い

オープンソース版の Locust と Locust Cloud は、どちらも同じLocustのテストシナリオ(Pythonコード)を使用できます。

項目 オープンソース版 Locust Locust Cloud
コスト 無料(オープンソース) 有料(サブスクリプション)一部無料
管理・運用 すべて自己管理(インフラ構築、スケーリング、メンテ) 管理不要(マネージドサービス)
手軽さ 環境構築が必要 すぐに利用開始
スケーリング 複雑な設定が必要 自動スケーリング

Locust Cloud の料金表を見てみる

公式サイトの料金表を確認してみます。
スクリーンショット 2025-10-23 2.11.36

月間仮想ユーザー時間(テスト実行あたりの仮想ユーザーのピーク数とテスト実行時間を乗じて計算)が200までと、最大同時仮想ユーザーが100まで無料で使えるようです。

Locust と Locust Cloud どちらを使う?

今回は Locust を初めて使用するため、環境構築の手間をかけずにすぐに試してみたいと考えました。そこで、Locust Cloud の無料版を利用して検証を進めていきます。

無料プランでも月間200 VU時間、最大100同時ユーザーまで利用できるため、初めての検証や小規模なテストには十分かと思います。

やってみた

それでは Locust Cloud を利用して AWSクラウド環境に負荷テストを行います。今回は以下の構成でシンプルなAPIを構築します。

  • API Gateway: REST API
  • Lambda: Node.js(TypeScript)で実装
  • Aurora Serverless v2 (PostgreSQL): データベース(MIN: 0.5 ACU, MAX: 2.0 ACU)
  • RDS Data API: Lambdaから DB アクセス

この構成を AWS CDK で構築し、Locust Cloud で負荷テストを実施します。
今回は、Locust Cloud について紹介することがメインテーマのため、CDKソースの実装内容については割愛させていただきます🙇‍♂️

構成図

負荷テストを行う環境は以下のような構成となります。AWSのサーバーレスな環境に対して負荷テストを実施します。
スクリーンショット 2025-10-24 3.06.40

負荷テスト前に確認すること

AWSで負荷テストを実施する前に、確認しておくべき重要なポイントがあります。

AWSへの事前申請の要否
AWSでは、特定の条件を満たす大規模な負荷テストを実施する場合、事前申請が必要となるケースがあります。
https://aws.amazon.com/jp/ec2/testing/

今回実施する負荷テスト(50ユーザー、約120 RPS、1分間)は小規模なため、上記の条件には該当せず、事前申請は不要でした。申請の詳細については、以下の記事が参考になります。
https://dev.classmethod.jp/articles/tsnote-support-ec2-testing/

より詳細な負荷テストの計画や実施方法については、以下のAWS公式ドキュメントが参考になります。
https://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/load-testing/welcome.html
https://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/load-testing/load-testing.pdf
https://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/load-testing/test-types.html
https://aws.amazon.com/jp/builders-flash/202308/distributed-test-on-aws/

負荷テストの要否判断や詳細な手順については、ボリュームがあるため、別の記事で詳しくご紹介したいと思います!

Locust Cloud の準備

アカウント登録

まずは Locust Cloud の公式サイト(https://www.locust.cloud/)からアカウントを作成します。
無料プランであれば、クレジットカード登録も不要ですぐに始められました。
スクリーンショット 2025-10-24 3.17.24

ログインすると、ダッシュボードが表示されます。
スクリーンショット 2025-10-24 3.27.24

テストシナリオの作成

Locustでは、Pythonコードでテストシナリオを記述します。今回は以下のようなシンプルなシナリオを作成しました。

Online Test Editor を選択します。
スクリーンショット 2025-10-24 3.32.43

エディタが開いたら、以下のようにテストシナリオを記述します。
スクリーンショット 2025-10-24 20.15.07

from locust import HttpUser, between, task

class ApiTestUser(HttpUser):
    # ユーザーの待機時間(リクエスト間隔)を1〜3秒でランダムに設定
    wait_time = between(1, 3)

    # API Gateway のエンドポイント
    host = "https://XXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/v1"

    @task
    def get_users(self):
        """ユーザー一覧を取得するAPIをテスト"""
        self.client.get("/users")

    @task(2)  # 重み付け:このタスクは2倍の頻度で実行される
    def get_user_by_id(self):
        """特定のユーザーを取得するAPIをテスト"""
        user_id = 1
        self.client.get(f"/users/{user_id}")

コードのポイント

  • HttpUser クラス: HTTPリクエストを発行するユーザーを定義
  • wait_time: リクエスト間の待機時間を設定(実際のユーザー行動をシミュレート)
  • @task デコレータ: 実行するタスク(APIリクエスト)を定義
  • 重み付け: @task(2)のように数値を指定すると、そのタスクの実行頻度を調整可能(この例ではget_user_by_idがget_usersの2倍の頻度で実行される

負荷テストの実行

左側の「Run UI」ボタンを選択してテストを実行します。

すると右側に新しい画面が表示されるので、以下のパラメータを設定します。
スクリーンショット 2025-10-24 3.47.07

基本設定

  • Number of users (peak concurrency): 50(同時接続ユーザー数)
  • Ramp up (users started/second): 2 ユーザーの増加率(秒あたり何ユーザー追加するか)
  • Host: テスト対象のエンドポイント API Gateway のURL

Advanced options
「Advanced options」を展開すると、さらに詳細な設定が可能です。
Run time(実行時間)

  • テストを実行する時間を指定
  • フォーマット: 5m(5分)、20s(20秒)、1h30m(1時間30分)など
  • 今回は1m(1分間)に設定

Profile(負荷パターン)

  • 空欄の場合:設定したユーザー数まで一定のペースで増加し、その後一定の負荷を維持
  • カスタム設定も可能(例:段階的に負荷を変動させるパターン)
  • 今回は空欄のまま

Testrun Tags(テストランタグ)

  • 例:initial-test, aurora-serverless
  • 後で結果を検索・分類する際に便利
  • 今回はfirst-runに設定

すべて設定できたら、緑色の「START」ボタンをクリックしてテストを開始します。

テスト開始

設定完了後、「Start」ボタンをクリックすると、すぐにテストが開始されます。

リアルタイムモニタリング

テスト実行中は、ブラウザ上でリアルタイムにメトリクスを確認できます。
画面上部のタブから、様々な情報を確認できます。

CHARTS: スループットとレスポンスタイムのグラフ
スクリーンショット 2025-10-24 13.50.01
上段のグラフを見ると、以下のことが分かります。

  • 緑色の線:ユーザー数が0から50まで段階的に増加(Ramp up: 2 users/sec の設定通り)
  • 水色のエリア:秒あたりのリクエスト数(RPS)を示している
  • 最大で約120 RPS を記録
  • テスト終了時(1分後)にユーザー数が0に戻り、RPSも0になっている

スクリーンショット 2025-10-24 13.51.43
下段のグラフでは、2つのエンドポイントのレスポンスタイムを確認できます:

  • 紫色の線が2本表示され、それぞれ /users と /users/1 のレスポンスタイムを示している
  • テスト開始直後は400〜500ms程度だったレスポンスタイムが、徐々に安定
  • テスト中盤以降は200ms前後で安定して推移

STATS: 統計情報(リクエスト数、レスポンスタイム、失敗率など)
スクリーンショット 2025-10-24 13.52.26
このタブでは、負荷テストの詳細な統計情報を一目で確認できます。
画面上部には、テスト全体のサマリーが表示されます。

  • Total Requests: 1,073リクエスト(テスト全体で実行された総リクエスト数)
  • Error Rate: 0%(エラー率0%、すべてのリクエストが成功)
  • Total Failures: 0(失敗したリクエスト数が0)

この結果から、今回の負荷テストではすべてのリクエストが正常に処理されたことが分かります。

REQUESTS: 各エンドポイントごとの詳細
エンドポイントごとのリクエスト数、失敗数、レスポンスタイムなどの統計情報が一覧で確認できます。
スクリーンショット 2025-10-24 13.52.26

SCATTERPLOT: レスポンスタイムの分布
このタブでは、各リクエストのレスポンスタイムを時系列で可視化した散布図が表示されます。
スクリーンショット 2025-10-24 13.55.07

見方

  • 横軸:経過時間(テスト開始からの時間)
  • 縦軸:レスポンスタイム(ミリ秒)
  • 各点:個別のリクエスト
  • 色分け:異なるエンドポイントやリクエストタイプを識別

読み取れること

  • レスポンスタイムのばらつき:点が密集している範囲が通常のレスポンスタイム
  • 外れ値の検出:極端に遅いリクエストがあれば、上部に点が表示される
  • 時系列での変化:テスト開始直後は遅く、徐々に安定していく様子が確認できる
  • スパイク:特定のタイミングで急にレスポンスが遅くなった場合、縦方向に点が伸びる

この散布図は、パフォーマンスの異常や傾向を視覚的に把握するのに有効です。

TESTRUNS: 過去のテスト履歴
このタブでは、過去に実行したすべての負荷テストの履歴を一覧で確認できます。
スクリーンショット 2025-10-24 13.55.56

EXCEPTIONS: エラー情報
このタブでは、テスト中に発生した例外エラーの詳細を確認できます。
スクリーンショット 2025-10-24 14.03.17
画像を見ると、エラーが発生していないため、空欄またはエラーなしの表示になっていますね。これは、すべてのリクエストが正常に処理されたことを示しています。

LOGS: 実行ログ
このタブでは、Locustの実行ログをリアルタイムで確認できます。
スクリーンショット 2025-10-24 14.05.38

WORKERS: ワーカーノードの状態
スクリーンショット 2025-10-24 14.17.10
このタブでは、負荷テストを実行しているワーカーノードの詳細情報を確認できます。

DOWNLOAD DATA: テスト結果のエクスポート
スクリーンショット 2025-10-24 14.18.05
このタブでは、テスト結果を様々な形式でダウンロードできます。

  • Download requests CSV:全リクエストの詳細データ(レスポンスタイム、ステータスコードなど)
  • Download failures CSV:失敗したリクエストの一覧
  • Download exceptions CSV:例外エラーの詳細
  • Download Report:テスト結果の総合レポート(HTML形式)

まとめ

今回、Locust Cloudを使ってAWS環境への負荷テストを実施してみました。
Locust Cloudは、負荷テスト用のサーバーを準備する必要がなく、アカウント登録だけですぐにテストを開始できました。

負荷テスト用の環境構築やインフラ管理が不要なため 、テストシナリオの作成に集中できるのはとても魅力的ですね。
この記事が、負荷テストツールを検討されている方や、Locustに興味を持たれた方の参考になれば幸いです。

この記事をシェアする

FacebookHatena blogX

関連記事