

# 設計上の考慮事項
<a name="design-considerations"></a>

このセクションでは、サポートされているアプリケーション、テストタイプ、スケジュールオプション、デプロイに関する考慮事項など、AWS での分散負荷テストソリューションの設計に関する重要な決定事項と設定オプションについて説明します。

## サポートされているアプリケーション
<a name="supported-applications"></a>

このソリューションは、AWS アカウントからアプリケーションへのネットワーク接続があれば、クラウドベースのアプリケーションとオンプレミスのアプリケーションのテストをサポートします。ソリューションでは、HTTP または HTTPS プロトコルを使用する API をサポートしています。

## テストタイプ
<a name="test-types"></a>

AWS での分散負荷テストは、シンプルな HTTP エンドポイントテスト、JMeter、K6、Locust の複数のテストタイプをサポートしています。

### シンプルな HTTP エンドポイントテスト
<a name="single-http-support"></a>

ウェブコンソールは、カスタムスクリプトを記述せずに HTTP または HTTPS エンドポイントをテストできる HTTP エンドポイント設定インターフェイスを提供しています。エンドポイント URL を定義し、ドロップダウンメニューから HTTP メソッド (GET、POST、PUT、DELETE など) を選択し、オプションでカスタムリクエストヘッダーと本文ペイロードを追加します。この設定により、アプリケーションに必要なカスタム認可トークン、コンテンツタイプ、またはその他の HTTP ヘッダーやリクエスト本文を使用して API をテストできます。

### JMeter テスト
<a name="jmeter-script-support"></a>

ウェブコンソールを使用してテストシナリオを作成する場合、JMeter のテストスクリプトをアップロードできます。このソリューションは、シナリオ S3 バケットにスクリプトをアップロードします。Amazon ECS タスクを実行すると、S3 から JMeter スクリプトをダウンロードしてテストを実行します。

**重要**  
JMeter スクリプトは同時実行数 (仮想ユーザー)、トランザクションレート (TPS)、ランプアップ時間、およびその他のロードパラメータを定義する場合がありますが、ソリューションはテストの作成時に [Traffic Shape] 画面で指定した値でこれらの設定を上書きします。Traffic Shape 設定は、テスト実行のタスク数、同時実行数 (タスクあたりの仮想ユーザー数)、ランプアップ時間、保留期間を制御します。

JMeter 入力ファイルがある場合は、JMeter スクリプトと一緒に入力ファイルを zip 圧縮できます。テストシナリオを作成するときに、zip ファイルを選択できます。

プラグインを含めると、バンドルされた zip ファイルの /plugins サブディレクトリ内のすべての .jar ファイルが JMeter 拡張ディレクトリにコピーされ、負荷テストに利用できるようになります。

**注記**  
JMeter 入力ファイルを JMeter スクリプトファイルに含める場合は、JMeter スクリプトファイルに入力ファイルの相対パスを含める必要があります。さらに、入力ファイルは必ず相対パスである必要があります。例えば、JMeter の入力ファイルとスクリプトファイルが /home/user ディレクトリにあり、JMeter スクリプトファイル内の入力ファイルを参照する場合、入力ファイルのパスは ./INPUT\$1FILES である必要があります。代わりに /home/user/INPUT\$1FILES を使用すると、入力ファイルを見つけることができないため、テストは失敗します。

JMeter プラグインを含める場合は、.jar ファイルを zip ファイルのルート内の /plugins という名前のサブディレクトリにバンドルする必要があります。zip ファイルのルートを基準にして、jar ファイルへのパスは、./plugins/BUNDLED\$1PLUGIN.jar でなければなりません。

JMeter スクリプトの使用方法の詳細については、「[JMeter User's Manual](https://jmeter.apache.org/usermanual/index.html)」を参照してください。

### K6 テスト
<a name="k6-script-support"></a>

このソリューションは、K6 フレームワークベースのテストをサポートしています。K6 は [AGPL-3.0 ライセンス](https://github.com/grafana/k6/blob/master/LICENSE.md)の下にリリースされています。このソリューションでは、新しい K6 テストを作成するときに、ライセンス確認メッセージが表示されます。アーカイブファイルに必要な入力ファイルと共に K6 テストファイルをアップロードできます。

**重要**  
K6 スクリプトは同時実行数 (仮想ユーザー)、ステージ、しきい値、およびその他のロードパラメータを定義する場合がありますが、ソリューションはテストの作成時に [Traffic Shape] 画面で指定した値でこれらの設定を上書きします。Traffic Shape 設定は、テスト実行のタスク数、同時実行数 (タスクあたりの仮想ユーザー数)、ランプアップ時間、保留期間を制御します。

### Locust テスト
<a name="locust-script-support"></a>

このソリューションは、Locust フレームワークベースのテストをサポートしています。アーカイブファイルに必要な入力ファイルと共に Locust テストファイルをアップロードできます。

**重要**  
Locust スクリプトは同時実行数 (ユーザー数)、スポーンレート、およびその他のロードパラメータを定義する場合がありますが、ソリューションはテストの作成時に [Traffic Shape] 画面で指定した値でこれらの設定を上書きします。Traffic Shape 設定は、テスト実行のタスク数、同時実行数 (タスクあたりの仮想ユーザー数)、ランプアップ時間、保留期間を制御します。

## テストのスケジューリング
<a name="scheduling-tests"></a>

このソリューションには、負荷テストの実行のために 3 つの実行タイミングオプションがあります。
+  **今すぐ実行** - 作成後すぐに負荷テストを実行します
+  **1 回実行** - 将来の特定の日時にテストを実行します
+  **スケジュールに従って実行** – cron 式を使用して定期的なテストを作成し、スケジュールを定義します

**[1 回実行]** を選択する場合、実行時間を 24 時間形式で指定し、負荷テストの実行を開始する実行日を指定します。

**[スケジュールに従って実行]** を選択する場合、cron 式を手動で入力するか、一般的な cron パターン (毎時間、特定の時刻に毎日、平日、毎月など) から選択できます。cron 式は、分、時間、日、月、曜日、年のフィールドを含むきめ細かなスケジュール形式を使用します。また、スケジュールされたテストが実行を停止するタイミングを定義する有効期限も指定する必要があります。スケジューリングの仕組みの詳細については、このガイドの「[テストスケジューリングワークフロー](https://docs.aws.amazon.com/solutions/latest/distributed-load-testing-on-aws/test-scheduling-workflow.html)」セクションを参照してください。

**注記**  
テスト期間: スケジューリング時には、テストの合計期間を考慮します。例えば、ランプアップ時間が 10 分、保留時間が 40 分のテストは完了までに約 80 分かかります。
最小間隔: スケジュールされたテストの間隔が想定されるテスト期間よりも長いことを確認します。例えば、テストに約 80 分かかる場合は、実行頻度を 3 時間は空けるようにスケジュールします。
時間単位の制限: 想定されるテスト時間が 1 時間未満であっても、1 時間差でテストをスケジュールすることはできません。

## 同時テスト
<a name="concurrent-tests"></a>

このソリューションは各テストの Amazon CloudWatch ダッシュボードを作成し、Amazon ECS クラスターで実行されるすべてのタスクの出力がリアルタイムで組み合わされて表示されます。CloudWatch ダッシュボードには、平均応答時間、同時ユーザーの数、成功したリクエストの数、失敗したリクエストの数が表示されます。ソリューションは各メトリクスを秒単位で集計し、ダッシュボードを 1 分毎に更新します。

## ユーザー管理
<a name="user-management"></a>

初期設定時に、Amazon Cognito がソリューションのウェブコンソールへのアクセスを許可するために使用するユーザー名と E メールアドレスを指定します。コンソールには、ユーザー管理機能はありません。ユーザーを追加するには、Amazon Cognito コンソールを使用する必要があります。詳細については、「*Amazon Cognito デベロッパーガイド*」の「[ユーザープール内のユーザーを管理する](https://docs.aws.amazon.com/cognito/latest/developerguide/managing-users.html)」を参照してください。

Amazon Cognito ユーザープールへの既存のユーザーの移行については、AWS ブログ「[Approaches for migrating users to Amazon Cognito user pools](https://aws.amazon.com/blogs/security/approaches-for-migrating-users-to-amazon-cognito-user-pools)」を参照してください。

## リージョンデプロイ
<a name="regional-deployment"></a>

このソリューションでは、特定の AWS リージョンでのみ利用可能な Amazon Cognito を使用します。そのため、このソリューションを Amazon Cognito が利用可能なリージョンにデプロイする必要があります。リージョン別の現在のサービス提供状況については、[AWS リージョン別のサービスのリスト](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)を参照してください。