こんにちは。
虎の穴ラボ株式会社の iwady です。
開発者の皆さん、Python してますか?
今回 Python は使いませんが、新しく導入することになった CDN の分散負荷試験を行うためにDistributed Load Testing On AWSというテンプレートを利用しましたので、そちらのお話をしようかと思います。
1. 導入
Distributed Load Testing On AWSは、その名の通り、分散負荷試験を行うのに適したソリューションで、CloudFormation からテンプレートをインポートする事で簡単に環境を構築できます。
当該テンプレートはこちらからダウンロードが可能です。 では、実際に環境構築をしてみます。
2. 環境構築
CloudFormation からスタック作成に進み、以下のように「既存のテンプレートから作成する」を選択後、「テンプレートファイルのアップロード」を選択し、先ほどダウンロードしたテンプレートファイルをアップロードするだけです。非常に簡単でした。
また、Application Composer でこのスタックがどういった構成になっているかも構成図で確認できます。これは便利ですね。
分散負荷試験を行うのに必要な以下の設定をスタック作成時に入力・保存します。
スタックが作成されると、AWS上にホストされた分散負荷試験アプリ(GUI)が立ち上がります。
3. ログイン
2 にて入力した AdminEmail 宛に分散負荷試験アプリへの URL とパスワードが届きますので、アクセスしてログインしてみます。
スタック作成後、すぐにアクセスすると正しいパスワードでも Cognito の認証で失敗する事があるようですので、その時は少し待ってみましょう。
ログインを行うと、以下のダッシュボードに遷移します。
4. テスト作成
では、次に上部メニューの「CREATE TEST」から実際にテストを作成してみます。
以下がテスト作成画面です。
テストの基本設定(General Settings) では負荷試験名と負荷試験の詳細の他には、Task Count、Concurrency、Region、Ramp Up、Hold For 等が設定できます。
TaskCount には、テストシナリオ実行時に Fargate クラスターで起動されるコンテナ数を、Concurrency は各タスクで生成される同時仮想ユーザー数を指定します(デフォルトではMAX200以内が推奨されています)。
負荷試験対象サーバのレスポンスタイム等様々な要因に影響されますので、ケース毎にどれくらいのスループットで負荷をかけたいのか、 Task Count と Concurrency を少しずつ調整すると良さそうです。
また、コンテナ数を増やせばそれだけ課金されますので、Hold For と共に小さく刻んで確認していくのが懐に優しいかもしれません。
次に、テストシナリオ(Scenario)についてですが、こちらは、Simple Http Endpoint と JMeter の2つから選択できます。
今回は JMeter を利用しましたので、Test Type に JMeter を選択後、作成済みの jmx ファイルをアップロードしてシナリオ設定は終わりです。
Simple Http Endpoint を利用する方は、TestType に Simple Http Endpoint を選択後、テスト対象 URL とメソッド、リクエストヘッダ・ボディを設定します。
6. テスト実行
それでは、Run Now でテスト実行してみます。
以下は実行直後の画面です(サンプルになります)。
Auto-Refresh は実行中の現状について自動更新するか否かの ON/OFF を設定でき、ONの場合は何秒で実行中の結果を更新するかも設定できます。
7. テスト結果
テスト結果画面ではAvg Response Time(平均レスポンスタイム)、Avg Latency(平均レイテンシ)、Request Per Second(1秒あたりのリクエスト数)などの項目が確認できます。
結果で確認可能な項目については、公式のブログでも紹介されていますので、そちらをご確認ください。
テスト結果はダッシュボードから各テストの詳細で参照できる他、S3 にも保存されているため、いつでも確認可能です。
また、Avg Response Time(平均レスポンス時間) と Virtual Users(仮想ユーザ数)、Successes(成功したリクエスト数)、Failures(失敗したリクエスト数)は、画面下部に折れ線グラフで表示されます。
不要になれば、CloudFormation から該当スタックを削除するだけで、基本的には殆どのリソースが整理されます。S3 やロググループ、サブネットなどのネットワーク関連の一部の設定・リソースは、該当スタックを削除しても残るので注意が必要です。
8. まとめ
本記事では、分散負荷試験を簡単に行う事ができるソリューションであるDistributed Load Testing On AWSを紹介しました。
負荷試験で必須の指標は取れますし、スタックの新規作成後にすぐ利用できるため、ローカルの JMeter 等で想定したスループットが達成できないケースやさっと分散負荷試験を実施したいケース等では非常に有用かと思われます。
分散負荷試験をご検討の方は是非チェックしてみてください。
採用情報
虎の穴では一緒に働く仲間を募集中です!
この記事を読んで、興味を持っていただけた方はぜひ弊社の採用情報をご覧下さい。
カジュアル面談やエンジニア向けイベントも随時開催中です。ぜひチェックしてみてください。 toranoana-lab.co.jp