AWS での分散負荷テストの仕組み - AWS での分散負荷テストソリューション

AWS での分散負荷テストの仕組み

次の詳細な内訳は、テストシナリオの実行に関連するステップを示しています。

テストワークフロー

image3

  1. ウェブコンソールを使用して、設定の詳細を含むテストシナリオをソリューションの API に送信します。

  2. テストシナリオ設定は JSON ファイル (s3://<bucket-name>/test-scenarios/<$TEST_ID>/<$TEST_ID>.json) として Amazon Simple Storage Service (Amazon S3) にアップロードされます。

  3. AWS Step Functions ステートマシンは、テスト ID、タスク数、テストタイプ、ファイルタイプを AWS Step Functions ステートマシンのインプットとして使用し実行します。テストがスケジューリングされている場合、最初に CloudWatch Events ルールが作成され、その後、指定された日付に AWS Step Functions がトリガーされます。スケジューリングワークフローの詳細については、このガイドの「Test scheduling workflow」セクションを参照してください。

  4. 設定の詳細は、scenarios Amazon DynamoDB テーブルに保存されます。

  5. AWS Step Functions タスクランナーワークフローでは、task-status-checker AWS Lambda 関数が、同じテスト ID に対して Amazon Elastic Container Service (Amazon ECS) タスクがすでに実行されているかどうかを確認します。同じテスト ID を持つタスクが実行中であることが判明すると、エラーが発生します。AWS Fargate クラスターで実行中の Amazon ECS タスクがない場合、関数はテスト ID、タスク数、テストタイプを返します。

  6. task-runner AWS Lambda 関数は、前のステップからタスクの詳細を取得し、AWS Fargate クラスターで Amazon ECS ワーカータスクを実行します。Amazon ECS API は、RunTask アクションを使用してワーカータスクを実行します。これらのワーカータスクが起動され、テストを開始するためにリーダータスクからの開始メッセージを待ちます。RunTask アクションは、定義ごとに 10 タスクに制限されています。タスク数が 10 を超える場合は、タスク定義はすべてのワーカータスクが開始されるまで複数回実行されます。この関数は、results-parser AWS Lambda 関数で現在のテストを区別するためのプレフィックスも生成します。

  7. task-status-checker AWS Lambda 関数は、すべての Amazon ECS ワーカータスクが同じテスト ID を使用して実行しているかどうかを確認します。タスクがまだブロビジョニング中の場合は、1 分間待ってから再度確認します。すべての Amazon ECS タスクが実行されると、テスト ID、タスク数、テストタイプ、すべてのタスク ID とプレフィックスを返して、task-runner 関数に引き渡されます。

  8. task-runner AWS Lambda 関数が再び実行し、今回はリーダーノードとして動作する単一の Amazon ECS タスクを起動します。この ECS タスクは、テストを同時に開始するために、各ワーカータスクにテスト開始メッセージを送信します。

  9. task-status-checker AWS Lambda 関数は、Amazon ECS タスクが同じテスト ID を使用して実行しているかどうかを再確認します。タスクがまだ実行中の場合は、1 分間待ってから再度確認します。実行中の Amazon ECS タスクがなくなると、テスト ID、タスク数、テストタイプ、プレフィックスを返します。

  10. task-runner AWS Lambda 関数が AWS Fargate クラスターで Amazon ECS タスクを実行すると、各タスクが Amazon S3 からテスト設定をダウンロードしてテストを開始します。

  11. テストが実行されると、各タスクの平均応答時間、同時実行ユーザー数、成功したリクエストの数、失敗したリクエストの数が Amazon CloudWatch に記録されるため、CloudWatch ダッシュボードで確認できます。

  12. テストにライブデータを含めた場合、ソリューションはサブスクリプションフィルタを使用して CloudWatch のリアルタイムテスト結果をフィルタリングします。その後、ソリューションはデータを Lambda 関数に引き渡します。

  13. Lambda 関数は、その後、受信したデータを構造化して AWS IoT Core トピックに公開します。

  14. ウェブコンソールはテスト用の AWS IoT Core トピックにサブスクライブして、トピックに公開されたデータを受け取り、テスト実行中のリアルタイムデータをグラフ化します。

  15. テストが完了すると、コンテナイメージは、詳細レポートを XML ファイルとして Amazon S3 にエクスポートします。各ファイルには、ファイル名の UUID が割り当てられます。例: s3://dlte-bucket/test-scenarios/<$TEST_ID>/results/<$UUID>.json

  16. XML ファイルが Amazon S3 にアップロードされると、results-parser AWS Lambda 関数は、プレフィックスで始まる XML ファイルの結果を読み取り、すべての結果を解析して 1 つの要約された結果に集約します。

  17. results-parser AWS Lambda 関数は、集計結果を Amazon DynamoDB テーブルに書き込みます。