メインコンテンツに移動
AWS ソリューション紹介

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

2021-08-03 | Author : 山澤 良介

はじめに

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

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

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

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

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

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


X ポスト » | Facebook シェア » | はてブ »

ご注意

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

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

builders.flash メールメンバー登録

builders.flash メールメンバー登録で、毎月の最新アップデート情報とともに、AWS を無料でお試しいただけるクレジットコードを受け取ることができます。 
今すぐ登録 »

「Distributed Load Testing on AWS」とは ?

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

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

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

  • JMeter スクリプトファイルを読み込んでのテスト作成
  • スケジュールに従った日時指定や定期的なテストの実行
  • 複数テストの同時実行
Screenshot of the AWS Distributed Load Testing results dashboard displaying summary metrics, percentile response times, CloudWatch metrics, and historical test results.

使用している 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 のイメージを用いて数千の接続ユーザーをシミュレートします。

Architecture diagram illustrating a distributed load testing solution on AWS, featuring frontend, backend, and load test engine components with services like Amazon S3, CloudFront, Amplify, API Gateway, Lambda, Cognito, IAM, CodePipeline, CodeBuild, DynamoDB, Fargate, VPC, ECR, and CloudWatch. Diagram text is in Japanese.

コスト試算の例

このソリューションを実行するために発生する 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 コンソールで起動する」を選択します。

Screenshot of the Japanese interface for AWS Distributed Load Testing (version 1.3.0), showing deployment time, cost estimate, source code, and CloudFormation template options.

項目の入力

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

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

  • スタックの名前 : <任意の名前>

  • Admin Name : <管理者のユーザー名>

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

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

Screenshot of the AWS CloudFormation console in Japanese, showing stack name and parameters configuration for a Distributed Load Testing stack. The form includes fields for stack name, console administrator name, and administrator email, with example values filled in.

項目の入力

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

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

A warning dialog in Japanese about AWS CloudFormation IAM Role capabilities. The dialog explains that the template contains Identity and Access Management (IAM) resources that may grant permissions to modify the AWS account, and asks the user to acknowledge the creation of IAM resources by CloudFormation.

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

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

Invitation message for joining the Distributed Load Testing Solution, showing the username 'yamary' and a redacted password, with a console login link to a CloudFront URL.

Amazon Cognito の認証画面

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

A user interface screenshot showing a web login form with fields for username and password, a sign-in button, and options for password reset and account creation.

パスワード変更

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

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

A user interface screen displaying a form to change the account password, featuring a new password input field and a 'Change' button.

Email アドレス検証

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

Screenshot showing an account recovery step that requires verifying contact information via email, with the Email option selected and a large Verify button.

認証コード入力

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

Screenshot showing an account recovery step that requires verifying contact information via email, with the Email option selected and a large Verify button.

コンソールにアクセス

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

Screenshot of the AWS Distributed Load Testing application showing the Test Scenarios dashboard. The dashboard includes columns for Name, Id, Description, Last Run (UTC), Status, Next Run (UTC), Recurrence, and Details, with a prompt to create a new test from the top menu.

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

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

  • Name : <任意の名前>

  • Description : <任意の説明>

  • Task Count : <タスク数>

  • Concurrency : <タスク毎の同時接続数>

  • Ramp Up : <設定した Concurrency 数に達するまでの時間>

  • Hold for : <設定した Concurrency 数を保持する時間>

  • HTTP endpoint under test : <テストを実行するターゲット URL>

Screenshot of the AWS user interface for creating a load test configuration. The UI includes fields for general settings such as test name, description, task count, concurrency, ramp up time, and hold duration, as well as scenario settings for test type, HTTP endpoint, HTTP method, headers, and body payload.

負荷テスト詳細画面

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

Screenshot of the AWS distributed load test details dashboard, showing test status, configuration settings, task counts, and real-time metrics overview for a load testing session running on Amazon ECS. Includes fields for test name, endpoint, method, task status, and links to Amazon CloudWatch Metrics Dashboard and ECS Console.

[参考]

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

Screenshot of the AWS ECS (Elastic Container Service) console interface in Japanese, displaying active tasks for the Load Testing Stack. The area shows task status, container instance information, and details highlighted for multiple Fargate tasks.

テスト結果の確認

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

  • 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 を参照してください。

Screenshot of the AWS Distributed Load Testing results dashboard showing test metrics such as average response time, latency, connection time, bandwidth, percentile response times, CloudWatch metrics chart, and results history table.

リソースの削除方法

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

Screenshot of the AWS user interface showing a confirmation dialog to delete the Load-Testing-Stack, with instructions and options, in Japanese.

まとめ

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

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

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

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

筆者プロフィール

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

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

A person smiling with a snowboard on a snowy mountain, wearing a winter jacket. The scene features a winter landscape with snow and a colorful sky in the background.