AWSで負荷テストを行うには?主要ツール5選と進め方・注意点を解説 | 株式会社ハートビーツ(HEARTBEATS Corporation)|AWS・クラウド・サーバーなどのインフラ運用を24時間365日サポート

AWSで負荷テストを行うには?主要ツール5選と進め方・注意点を解説

AWSセキュリティ基礎知識

WebサービスやアプリケーションをAWS上で運用する際、その性能と安定性を保証するために不可欠なのが「負荷テスト」です。キャンペーンやメディア掲載による突然のアクセス急増で、サービスが停止してしまった経験はありませんか。

このような事態を防ぎ、ユーザーに快適なサービスを提供し続けるためには、事前の負荷テストが鍵を握ります。

この記事では、AWS環境で負荷テストを計画しているエンジニアの方向けに、その重要性から具体的な目的、主要なツール、実践的な進め方、そして注意点までを網羅的に解説します。自社サービスに最適な負荷テストを設計し、自信を持ってサービスを運用するための一助となれば幸いです。

関連記事:負荷テストとは?目的や種類、実施手順からおすすめツールまで徹底解説

この記事のポイント

  • AWSでの負荷テストは、アクセス急増時のサービスダウンや機会損失を防ぎ、良好なユーザー体験の維持やインフラコストの最適化を図るために重要である。
  • クラウド特有のAuto Scalingによるスケーラビリティの検証や、システムの限界性能の把握、性能低下を招くボトルネックの特定・解消を主な目的として実施する。
  • 実施にあたっては「目的設定」「シナリオ設計」「テスト環境構築・実行」「結果分析・改善」の4ステップに沿って計画的に進め、本番影響を避ける専用環境の用意やAWSテストポリシーの事前確認が重要である。
  • ツールにはJMeter・k6・LocustといったOSSや商用サービスのほか、Fargateを活用して容易に分散環境を構築できる公式の「Distributed Load Testing on AWS」などの選択肢がある。

AWSで負荷テストが重要視される理由

AWSで負荷テストが重要視される理由の図解

AWSのようなクラウドプラットフォームを利用することで、インフラの構築は以前より格段に容易になりました。しかし、その柔軟性や拡張性を最大限に活かすためには、システムの性能を正しく把握し、最適化することが不可欠です。

ここでは、AWS環境で負荷テストが特に重要視される3つの理由を解説します。

サービスダウンによる機会損失の防止

ECサイトのセール時や、テレビで紹介された直後など、アクセスが集中した際にサーバーがダウンしてしまうと、大きな販売機会の損失に繋がります。

負荷テストを事前に行うことで、システムがどの程度のアクセスまで耐えられるかを把握し、サーバーダウンを未然に防ぐための対策を講じることが可能になります。これにより、ビジネスチャンスを逃すことなく、売上の最大化を図ることができます。

ユーザー体験の維持・向上

Webサイトの表示が遅い、アプリケーションの反応が悪いといったパフォーマンスの問題は、ユーザー満足度を著しく低下させます。特に、多くの競合サービスが存在する現代において、快適な操作性はユーザーに選ばれ続けるための重要な要素です。

負荷テストを通じてレスポンスの遅延やエラーが発生する箇所を特定し、改善することで、ユーザー体験の維持・向上につながります。

インフラコストの最適化

AWSの大きなメリットは、必要に応じてリソースを増減できるスケーラビリティにあります。しかし、過剰なスペックのインスタンスを常に稼働させていると、不要なコストが発生します。

負荷テストによってシステムの処理能力を正確に把握できれば、平常時やピーク時に合わせて適切なリソース配分が可能となり、インフラコストの最適化に繋がります。

AWSにおける負荷テストの主な目的

ノートパソコンを持って指差す笑顔の女性社員

負荷テストと一言で言っても、その目的は様々です。期待する成果を得るためには、「何のためにテストを行うのか」を明確にすることが重要です。AWS環境における負荷テストの主な目的を3つ紹介します。

システムの限界性能の把握

現在構築しているシステムが、どれくらいのユーザー数やリクエスト数まで正常に処理できるのか、その限界点(スループットの最大値)を明らかにします。

この数値を把握することで、将来のアクセス増加を見据えたキャパシティプランニングの精度を高めることができます。

ボトルネックの特定と解消

システムに高い負荷をかけた際に、性能を低下させる原因となっている箇所(ボトルネック)を特定します。ボトルネックは、アプリケーションの処理、データベースのクエリ、ネットワーク設定、AWSリソースのスペック不足など、様々な場所に潜んでいます。

ボトルネックを特定し解消することで、システム全体のパフォーマンスを効率的に向上させることが可能です。

関連記事:Webサイトが重い・遅い原因とは?表示速度を改善する方法

スケーラビリティの検証

AWSのAuto Scalingなどが設定通りに機能し、負荷の増減に応じて適切にリソースが拡張・縮小されるかを確認します。

予期せぬアクセス急増時にも自動でサーバーが増強され、安定したサービス提供が継続できることを検証するのは、信頼性の高いシステムを構築する上で非常に重要です。

実際の導入事例をご紹介

数万人規模のアクセスが集中するスポーツ動画配信サービスでは、プロ野球の開幕カードなど注目度の高い試合に備えて、事前にハートビーツへご依頼いただき負荷テストを実施しています。

あわせてサーバーのスケールアウト・スケールアップも行い、万全の準備を整えて本番に臨まれています。

▶︎実際の導入事例を見る

関連記事:AWSのスケーリング設計とは?負荷対応とコスト最適化を両立する設計ガイド

AWSの負荷テストで使われる代表的なツール・サービス5選

パソコンのキーボードを操作する人の手元

AWSで負荷テストを行うには、様々なツールやサービスが利用できます。ここでは、オープンソースソフトウェア(OSS)からAWS公式のソリューション、サードパーティ製のサービスまで、代表的な選択肢を5つ紹介します。

それぞれの特徴を理解し、プロジェクトの要件に合ったものを選びましょう。

【OSS】Apache JMeter

Apache JMeterは、オープンソースの負荷テストツールの代表格で、Javaベースで開発されたツールです。

GUIでテストシナリオを直感的に作成でき、HTTP/HTTPSだけでなく、JDBCやFTPなど多様なプロトコルに対応しています。豊富な機能と詳細なレポート機能が魅力ですが、大規模なテストを行うには複数のEC2インスタンスで分散実行環境を自分で構築する必要があります。

【OSS】k6

k6は、Grafana Labsが開発しているGo製のモダンな負荷テストツールです。シナリオは、JavaScriptかTypeScriptのコードとして作成します。

k6は、実行するマシンのCPUコアを余さず使って動作します。マシンの性能が十分に高ければ、たいていの負荷テストは1台でまかなえるため、複数台に負荷生成を分散させる複雑な構成を組まずに済みます。

【OSS】Locust

Locustは、テストシナリオをPythonの標準的なコードで作成可能なOSSの負荷テストツールです。

複数のマシンで負荷を分担して実行する仕組みも備えており、大規模な負荷をかけることも可能です。

【AWS公式】Distributed Load Testing on AWS

Distributed Load Testing on AWS(以下、DLT)は、AWSが公式に提供する負荷テストのソリューションです。

AWS Fargate上でコンテナを実行し、負荷を生成します。環境はAWSが用意したCloudFormationテンプレートで構築でき、テストの実行や結果の確認はWebコンソールで行えます。

【商用サービス】サードパーティ製の負荷テストサービス

BlazeMeterのように、負荷テストの実行環境をクラウド上で提供する商用のサービスもあります。

負荷を発生させる環境はサービス側で用意されているため、自分で構築する必要はありません。テストの作成や実行はWeb画面から行え、結果はテスト実行中からレポートとして確認できます。

【4ステップ】AWSでの負荷テストの基本的な進め方

AWSでの負荷テストの基本的な進め方の図解

ツールの選定と合わせて、負荷テストを成功させるためには計画的なアプローチが重要です。ここでは、AWSで負荷テストを進める上での基本的な4つのステップを解説します。

Step1. 目的とゴールの設定

まず、「何のためにテストを行うのか」という目的を明確にします。例えば、「セール期間中のアクセス増に耐えられるか確認する」「新機能リリース後のレスポンスタイムを保証する」などです。

目的に基づいて、具体的な数値目標(ゴール)を設定します。

Step2. 負荷テストシナリオの設計

設定したゴールを検証するためのテストシナリオを作成します。実際のユーザーの行動を想定し、どのページにどのくらいの割合でアクセスがあるか、どのような操作を行うかを定義します。

例えば、ECサイトであれば、「トップページ閲覧 → 商品検索 → 商品詳細閲覧 → カート投入 → 購入」といった一連の流れをシナリオとして組み立てます。

Step3. テスト環境の構築と実行

本番環境とは別に、負荷テスト専用の環境を構築することが推奨されます。本番とできるだけ同じ設定・規模で構成したテスト環境を用意しましょう。

環境が準備できたら、選定したツール(JMeterやk6など)をセットアップし、設計したシナリオに基づいてテストを実行します。実行中はCloudWatchなどを活用し、各種リソースのメトリクスを監視します。

関連記事:AWS監視の基本とは?死活監視・アラート設計と主要サービスの活用ポイント

Step4. 結果の分析と改善アクション

テストが完了したら、取得したデータを分析します。設定したゴールを達成できたかを確認し、達成できなかった場合は、CPU使用率、DBのSlow Query、エラーログなどからボトルネックとなっている箇所を特定します。

原因を特定したら、パラメータのチューニングやインスタンスタイプの変更、アプリケーションの改修といった改善策を立案し、再度テストを行って効果を測定します。このサイクルを繰り返すことで、システムの性能を向上させていきます。

Distributed Load Testing on AWSの利用手順

ノートPCで作業をする人の手元と手帳

AWS公式のソリューションである「Distributed Load Testing on AWS」は、手軽に大規模な負荷テスト環境を構築できるため非常に便利です。ここでは、その基本的な利用手順を紹介します。

CloudFormationテンプレートでのデプロイ

CloudFormationテンプレートを起動し、必要なパラメータを入力するだけで、負荷テストに必要なリソース一式が自動でデプロイされます。デプロイが終わると、Webコンソールのログイン手順がメールで届きます。

テストシナリオの作成とアップロード

このソリューションはJMeterやk6、Locustといった複数のテストツールに対応しています。利用したいツールの形式に合わせてテストシナリオを作成し、Webコンソールからアップロードします。

テストの実行とWebコンソールでの確認

デプロイ時に作成されるWebコンソールにアクセスし、タスク数(起動するコンテナ数)、タスクあたりの同時実行数、負荷を徐々に上げて目標値に届くまでの時間(ランプアップ)、目標の負荷をかけ続ける時間(ホールド)などを設定してテストを開始します。

タスクあたりの同時実行数は、デフォルト設定では200が推奨上限です。
テスト完了後は、レスポンスタイムや成功・失敗数などの結果をWebコンソールで確認でき、結果のファイルもダウンロードできます。

AWSで負荷テストを実施する際の注意点

AWSで負荷テストを実施する際の注意点の図解

AWSの柔軟性を活かして負荷テストを行う際には、いくつか注意すべき点があります。安全かつ効率的にテストを進めるために、以下のポイントを必ず確認してください。

AWSのテストポリシーを事前に確認する

AWS上から負荷テストを行う場合は、AWSが定める「Amazon EC2 テストポリシー」に沿って実施する必要があります。

このポリシーは、正規のトラフィックを特定のアプリケーションに大量に送る負荷テストと、対象を意図的に過負荷にするDDoSシミュレーションを区別しています。DDoSシミュレーションは別のポリシーの対象で、AWSが事前に認めたパートナーしか実施できません。

また、AWS上のエンドポイントを対象にする場合は同じリージョンに置くこと、トラフィック量が多い場合はAWS側で制御がかかり得ることも示されています。実施前に最新のポリシーを確認しましょう。

本番環境とテスト環境の分離

負荷テストは対象システムに高い負荷をかけるため、障害が発生する可能性があります。そのため、本番環境とは別に、本番とできるだけ同じ設定・規模で構成したテスト環境を用意して実施しましょう。

テストで本番環境のデータを使う場合は、個人情報などの機密情報を取り除いてから使うか、テスト用に作成したデータを使うようにしましょう。

セキュリティグループとネットワーク設定

負荷を発生させるEC2インスタンスやFargateタスクから、テスト対象(ALBやEC2インスタンス)へ正しく通信できるように、セキュリティグループやネットワークACLを設定する必要があります。IPアドレスを制限するなど、テストに必要な通信のみを許可するようにしましょう。

なお、テスト対象側でアクセス元IPを制限している場合は注意が必要です。DLTが起動するFargateタスクは、固定のIPアドレスを持たせることができないため、NAT Gatewayを経由させてアクセス元IPを固定するなどの構成変更が必要になる場合があります。

まとめ

本記事では、AWS環境における負荷テストの重要性から、具体的な目的、ツールの選定、実践的な手順、そして実施する上での注意点までを包括的に解説しました。

今回紹介した4つのステップ(目的設定、シナリオ設計、実行、分析)に沿って計画的にテストを進め、システムの性能を正確に把握し、ボトルネックを解消していくことで、サービスの信頼性を大きく高めることができます。

ぜひこの記事を参考に、自社サービスに最適な負荷テストを計画・実行してみてください。

関連記事

TOP