AWSの負荷テストソリューション Distributed Load Testing on AWS を負荷テストで使ってみた

Advent Calendar 2021, AWS, 負荷テスト

この記事はレコチョク Advent Calendar 2021の5日目の記事となります。

自己紹介

こんにちは。
レコチョクでサーバーサイドエンジニアをしている原です。

弊社では音楽サービスを提供しているので、自己紹介として自分の好きな音楽について少し話そうと思います。

好きなジャンルは、シューゲイザー、叙情/激情/ポエトリーリーディングバンド、J-ロックなどいろいろです。
好きなアーティストは、クレナズム、Fall of Tears、amazarashi、mol-74などなどが好きです。もちろん音楽を聴くときは弊社のサービスを利用しています。

小さい頃からいろいろな音楽を聴いているので、他にも好きなアーティストや曲はあるのですが、長くなるのでこの辺にしようと思います。


はじめに

私は、今年2021年10月1日にリリースされた新サブスクリプション音楽配信サービスである TOWER RECORDS MUSIC の開発に携わっています。
そして、上記サービスのリリース前負荷テストとして、AWSの負荷テストソリューションである Distributed Load Testing on AWSを利用しました。

本記事では、Distributed Load Testing on AWS を使ってみて、どんなところが便利だったのかを簡単にお伝えできたら良いなと思っています。
それでは、よろしくお願いします。

JMeterを用いた負荷テスト

早速、 Distributed Load Testing on AWS の説明をしていこうかと思ったのですが、
以前利用していたJMeterを比較対象とする方が話を進めやすいので、先にJMeterについて説明させていただきます。

負荷テストツール JMeter について

JMeterは、Apacheソフトウェア財団が開発しているオープンソースの負荷検証ツールです。
負荷テストのツールとしては、定番なのかなと思います。
ただ、JMeterで負荷テストをする時に気をつけなければいけないことがあります。
それが、JMeterにはGUIとCUIで負荷テストを実行できるのですが、GUIで負荷テストをすると正しい結果が得られない ということです。
そのため、下の記事のように負荷テストの計画を作るのはGUI、テスト自体の実行はCUIで実施するようにしていました。
【JMeter】負荷テスト実行はGUIから行ってはならない

これが意外に手間で、かつ、テスト実行結果をExcelに書き出しグラフ化させるのも地味に手間でした。(プログラムで自動化すればよかったかもしれないですが、そこまで手が回らず…)
結局、以下のような流れで負荷テストを実行していました。

Distributed Load Testing on AWS とは

AWS公式サイトから抜粋してきました。

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

上記の通り、エンドポイントに対して同時接続して、負荷テストを実行してくれる便利なソリューションです。

Distributed Load Testing on AWSを構築しているAWSサービスやコスト面などについては、AWS公式サイトに詳細が記載されています。
コストの具体的な計算式は以下になりますが、TOWER RECORDS MUSICで実際にかかった費用としては、数千円程度でした。

Distributed Load Testing on AWS 上での負荷テストの流れ

今回 Distributed Load Testing on AWS を導入してみたところ、以下の手順で負荷テストを実施できました。

Distributed Load Testing on AWS での負荷テスト実施手順

【再掲】JMeterでの負荷テスト実施手順

また、構築する手間は少なく、以下の手順で構築が完了したので簡単だったそうです。(私は構築しておらず…)
1. DockerHubのアカウント作成
2. DockerHubのアカウントのシークレット設定
3. Cloudformation実行

実際に使い、JMeterと比較して1番便利だなと思ったことは、すべてGUIで完結できたということです。
設定値を決めて負荷テストを実行すれば、結果がグラフとして表示されるというのはかなり便利でした。
レスポンスタイムなども詳細に記載されているので、この結果を見ればサービスの品質担保をある程度チェックできるかなと思いました。
以下が、実際のテスト結果になります。

stress_test01

Distributed Load Testing on AWS のメリット

ここからは、個人的に役に立った箇所を紹介していこうと思います。

1. テストシナリオは、JMeterのシナリオを指定できる

JMeterファイルをそのまま利用できるため、以前JMeterで負荷テストを実施していた私にとってはとてもありがたい仕様でした。
追加する方法も簡単で、以下の画像のようにテストシナリオを設定する項目にJMeterの項目があるので、そこから追加すればOKです。

スクリーンショット 2021-11-22 14.12.21

2. 今まで実施したテスト要件と結果がリスト化されている

次に、以下のように今まで実施したテスト要件と結果がリスト化されているところです。(負荷テスト名と負荷テストの説明文は隠しています)
履歴として残っているため、履歴を参考にしながら新しい負荷テストを実施できるので、
引き継ぎとして教える際にも簡単にこのソリューションの使い方を伝授できます。

stress_test02

終わりに

いかがだったでしょうか?
リリース前の負荷テストは、リリース時にサーバーへの負荷がかかりすぎないかを確認するためにとても大事な作業だと思います。
ただ、負荷テストは準備に意外に手間がかかるため、手間を最小限に、かつ正確な結果を返してくれるソリューションとして Distributed Load Testing on AWS は、おすすめだと思います。
皆様がこの記事をきっかけに Distributed Load Testing on AWS に興味を持っていただけると幸いです。

明日のレコチョク Advent Calendar 2021は6日目「QuickSightの埋め込みダッシュボードを使ってサービス開発した話」です。お楽しみに!

参考記事