概要

本記事では、Distributed Load Testing on AWS(DLT)のセットアップ手順を解説します。
DLTは、AWS上で手軽に大規模な負荷試験を実行できるソリューションで、複数の仮想ユーザーを同時に動作させることで本番環境に近い高負荷を再現できます。
例えば、新しいAPIをリリースする前に数千~数万リクエストを同時処理できるか検証したい場合や、EC2・RDS・Lambdaなどのリソースが想定負荷に耐えられるか確認したい場合に役立ちます。
AWS上で負荷試験を検討している方の参考になれば幸いです。

目次

1. デプロイ方法

1-1. ソリューションページへアクセス

まず、以下のリンクからDLTのページにアクセスします。
Distributed Load Testing on AWS – AWS ソリューション実装
ページ内の「AWS コンソールで起動する」をクリックします。

1-2. CloudFormationの起動

CloudFormationのスタック作成ページが開きます。
※ 初期表示のリージョンがバージニア北部になっている場合があるため、必要であれば東京リージョンに変更してください。


1-3. ステップ1:スタックの作成

特に変更する必要はないため、デフォルトのまま「次へ」をクリックします。


1-4. ステップ2:必須情報の入力

  • スタック名
  • ユーザ名
  • メールアドレス

以上の3項目は必須です。入力後、「次へ」をクリックします。


1-5. ステップ3:オプション設定

特に設定を変更する必要はありません。「次へ」をクリックします。


1-6. ステップ4:確認と作成

設定内容を確認し、問題がなければ「送信」をクリックします。

2. 初回ログイン

2-1. 招待メールを確認

デプロイが完了すると、登録したメールアドレスに招待メールが届きます。
メールに記載されたログインURLにアクセスします。


2-2. ログイン

  • ユーザ名:1-4で入力したもの
  • パスワード:招待メールに添付されたもの

これらを入力してログインします。


2-3. DLTダッシュボードの表示

ログインに成功すると、DLTのダッシュボードが表示されます。
ここから負荷テストのシナリオを作成・実行できます。

3. テストの実行方法

ここからは、簡単にですがDLTで負荷テストを実行する手順を解説します。
※HTTP APIを事前に用意してください。

3-1. テストの作成

ダッシュボード上部の「CREATE TEST」をクリックします。


3-2. テスト設定

画面左側の設定項目に、テストの条件を設定します。

  • Test Name:テストの名前
  • Description:テストの説明
  • Task Count:タスク数
  • Concurrency:同時実行数
  • Region:テストを実行するリージョン
  • Ramp Up:どれくらいの時間をかけてユーザー数を増やしていくか。例えばConcurrencyを100に設定してRamp Upを10分に設定した場合、1分ごとに10人ずつユーザー数が増えていきます。
  • Hold For:最大ユーザー数まで増えたあと、その状態をどのくらいキープするか。例えばHold Forを10分に設定した場合、最大ユーザー数に達したあと10分間その状態をキープします。

次に、テスト対象のHTTPエンドポイントを入力し、「RUN TEST」をクリックします。


3-3. テスト結果の確認

数分待つと、ダッシュボードにテスト結果が表示されます。

4. まとめ

今回はDLTのセットアップ手順を解説しました。事前に「AWSの負荷テストツールって複雑そう…」と身構えていたのですが、実際にやってみると想像以上にシンプルで、良い意味で拍子抜けしました。

ただ、実際の案件では細かい要件がありました。1つのAPIにつき合計45分間テストを実行し、15分ごとにリクエスト数を段階的に上げていく方式でした(最初の15分は毎秒5リクエスト、次の15分は毎秒10リクエスト、最後の15分は毎秒15リクエスト)。
DLTのみでは実現できないため、JMeterとDLTを組み合わせることを考えました。しかし、DLTは「決められた時間内に、できるだけ多くの負荷をかける」ことが得意な一方で、「リクエスト数を正確にコントロールする」ことが難しく、結局、JMeter + DLTの組み合わせでも要件を満たせないと判断し、最終的には複数台のEC2インスタンスを立ててJMeterを分散実行する方法に切り替えました。

ただ、今振り返ってみると、シナリオの設計をもう少し工夫すれば、JMeter + DLTでも実現できたかもしれません。次回同じような要件があれば、再挑戦してみたいと思います!