大規模な負荷テストを実行可能。「Distributed Load Testing on AWS」 を試してみる

2021-08-03
AWS ソリューション紹介

山澤 良介

皆さん、こんにちは!テクニカルソリューションアーキテクトの山澤良介です。

皆さんは「AWS ソリューション」というページをご存知でしょうか?

AWS ソリューションでは、世界中のユーザーが直面する一般的な問題の解決策を提供しております。既に 60 を超える多数のソリューションが公開されており、お客様は AWS ソリューションを使用することで実装にかかる時間と労力を節約することができます。

このように非常に便利なものではあるのですが、AWS ソリューションの存在を知っていた方であっても、「どんなソリューションがあるのかわからない」「ソリューションの概要や使い方がわからない」などの理由で実際に活用したことがある方は少ないのではないでしょうか ?

そのような背景から、今回の記事では、皆さんに活用頂けそうな AWS ソリューションを 1 つ、使い方などを含めて紹介していこうと思います !

今回紹介するソリューションは、「Distributed Load Testing on AWS」という負荷テストソリューションです。
たとえば、「Web システムを構築したが、どれくらい負荷に耐えられるのか確認したい」ときなどにご活用頂けます。

それではここから本ソリューションの概要や使い方を紹介します。

ご注意

本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。

*ハンズオン記事およびソースコードにおける免責事項 »


「Distributed Load Testing on AWS」とは ?

「Distributed Load Testing on AWS」は、 HTTP または HTTPS のエンドポイントに対して、数万の同時接続をシミュレートし、負荷テストを実行することが可能なソリューションです。本ソリューションをデプロイ後、 Amazon S3 にてホストされる Web コンソールにアクセスし、接続先エンドポイント、同時接続数、テスト時間などを指定することでテストを実行できます。

クリックすると再生します

テスト実行後は、このように結果を確認できます。

また、その他にも以下のことが可能です。

  • JMeter スクリプトファイルを読み込んでのテスト作成
  • スケジュールに従った日時指定や定期的なテストの実行
  • 複数テストの同時実行

使用している AWS サービスは ?

本ソリューションは、フロントエンドとバックエンドの2つのコンポーネントで構成されています。

  • フロントエンド
    • ユーザーは Web コンソールや REST API を介して、テストデータを操作します。
    • Web コンソールは、 Amazon S3 でホストされ、 Amazon CloudFront を介してアクセス可能な React アプリケーションで、 AWS Amplifyを 用いて Amazon Cognito と統合されており、ユーザーを認証します。テストの構成と実行、実行中のテストの監視、および詳細なテスト結果の表示が可能です。
    • リクエストに基づいて、 Amazon API Gateway は適切な AWS Lambda 関数を呼び出して、テストシナリオを JSON オブジェクトとして Amazon S3 に保存、設定の詳細を Amazon DynamoDB に保存するなどを行います。
  • バックエンド
    • 初回デプロイ時に、 AWS CodePipeline を用いて、OSS の負荷テストフレームワークである Taurus のイメージを Amazon ECR に登録します。
    • テスト実行時には、 AWS Fargate と Amazon ECS を使用して、1秒あたりに指定された数のトランザクションを生成するように、 Taurus のイメージを用いて数千の接続ユーザーをシミュレートします。

コスト試算の例

このソリューションを実行するために発生する AWS サービスのコストは、実行される負荷テストの数、それらの負荷テストの期間、およびテストで使用されるデータの量によって異なります。

バージニアリージョンにて本ソリューションを実行するためのコストは、月額約 $29.65 です。試算の前提は以下となります。

サービス 項目 月額料金
AWS Fargate 10タスク (2vCPUs, 4 GB メモリ) x 30 時間 29.62
Amazon DynamoDB オンデマンドキャパシティモードで利用
書き込み要求:1,000
読み出し要求:1,000
0.0015
AWS Lambda リクエスト回数:1,000
実行時間:10
0.0015
AWS Step Functions 状態遷移回数:1,000 0.025
Total: $29.65 / 月

※ 2021 年 7 月 9 日時点での試算です。


デプロイ方法 / 設定方法

AWS CloudFormation スタックの作成

本ソリューションにて使用する AWS CloudFormation テンプレートを実行するために、こちら のランディングページにアクセスします。

AWS コンソールで起動する」を選択します。

前提条件 - テンプレートの準備」、「テンプレートの指定」は変更せずに「次へ」を選択します。

スタックの名前」、「パラメータ」には以下の項目を入力します。

  • スタックの名前 : <任意の名前>
  • Admin Name : <管理者のユーザー名>
  • Admin Email : <管理者のメールアドレス>
     * 起動後、 Web コンソールのログイン手順が記載された E メールがこのアドレスに送信されます。

スタックオプションの設定」、「詳細オプション」は変更せずに「次へ 」を選択します。

クリックすると拡大します

レビューを下へスクロールし、AWS CloudFormation によって IAM リソースが作成される場合があることを承認します。 にチェックを入れ、スタックの作成 を選択します。

クリックすると拡大します

スタックの作成が成功したことを確認します。作成完了まで 15 分程度かかります。

Web コンソールへのログイン

デプロイが完了すると、AWS CloudFormation スタック作成時に指定したメールアドレスにこちらのようなメールが届きますので、Console の URL にアクセスします。

Amazon Cognito の認証画面が表示されますので、メールに記載の Username / Password を使用して SIGN IN します。

クリックすると拡大します

初回ログイン時は、パスワードを変更する必要があります。

* パスワードは大文字、小文字、数字を含めて 8 文字以上にする必要があります。

クリックすると拡大します

次に、Email アドレスの検証画面が表示されますので、Email にチェックを入れ、「VERIFY」ボタンを選択します。

クリックすると拡大します

登録したメールアドレスに Enter code が記載されたメールが届きますので、そのコードを入力します。

クリックすると拡大します

すると、 Web コンソールにアクセスできます。

クリックすると拡大します


テストを作成、実行してみよう !

Web コンソールから「CREATE TEST」を選択後、以下の項目を入力します。

  • Name : <任意の名前>
  • Description : <任意の説明>
  • Task Count : <タスク数>
  • Concurrency : <タスク毎の同時接続数>
  • Ramp Up : <設定した Concurrency 数に達するまでの時間>
  • Hold for : <設定した Concurrency 数を保持する時間>
  • HTTP endpoint under test : <テストを実行するターゲット URL>

クリックすると拡大します

RUN NOW」を選択すると、テストの実行が開始され、負荷テストの詳細画面に遷移します。

クリックすると拡大します

[参考] Tasks Status の「Amazon ECS Console」を選択すると、 Amazon ECS のサービス画面に遷移し、実際に指定した数のタスクが起動していることが確認できます。

クリックすると拡大します

テスト結果の確認

テストが完了すると、次の結果を含む詳細なレポートが生成されます。

  • Average response time : テストによって生成されたすべてのリクエストの平均応答時間 (秒)
  • Average latency : テストによって生成されたすべてのリクエストの平均レイテンシー (秒)
  • Average connection time : テストで生成されたすべてのリクエストについて、ホストへの接続にかかった平均時間 (秒)
  • Average bandwidth : テストで生成されたすべてのリクエストの平均帯域幅
  • Total Count : リクエストの総数
  • Success Count : 成功したリクエストの総数
  • Error Count : エラーの総数
  • Requests Per Second : テストで生成されたすべてのリクエストの 1 秒あたりの平均リクエスト数
  • Percentile : テストの応答時間のパーセンタイル値 (最大応答時間は 100 %、最小応答時間は 0 %)

Taurus のテスト結果の詳細については、Taurus ユーザーマニュアルの Generating Test Reports を参照してください。

クリックすると拡大します


リソースの削除方法

作成したリソースは、 AWS CloudFormation スタックの削除により一括で削除可能です。

クリックすると拡大します


まとめ

今回の記事では「Distributed Load Testing on AWS」ソリューションの概要や使い方を紹介しました。 AWS CloudFormation スタックを作成するだけで、すぐに負荷テストを実行できることをご理解いただけたのではないかと思います。JMeter のシナリオも利用することが可能なため、是非負荷テストを実施する際にはご検討してみてください。

また、本ソリューションを活用される際には、実装ガイド に記載の考慮事項もご一読頂ければと思います。

今後も AWS ソリューション紹介の記事を書いていきたいと思いますので、是非また読んでもらえたら嬉しいです。

それではまた次の記事でお会いしましょう !


builders.flash メールメンバーへ登録することで
AWS のベストプラクティスを毎月無料でお試しいただけます

筆者紹介

山澤 良介
アマゾン ウェブ サービス ジャパン合同会社
テクニカルソリューションアーキテクト

テクニカルソリューションアーキテクトとして、業種業態を問わず様々なお客様を支援させて頂いています。
前職では主にネットワーク案件を担当していたため、好きなサービスは、AWS Direct Connect と AWS Transit Gateway です。
休日はスノーボードが大好きなので、シーズン中は毎週スキー場に行っているほか、オフシーズン中もオフトレ施設に行っています。

AWS を無料でお試しいただけます

AWS 無料利用枠の詳細はこちら ≫
5 ステップでアカウント作成できます
無料サインアップ ≫
ご不明な点がおありですか?
日本担当チームへ相談する