準備段階
-
テスト環境の分離
- 本番環境とは別のAWSアカウントまたはリージョンでテスト環境を構築
- 本番DBへの影響を避けるためにテスト用DBを用意
-
テストシナリオ設計
- 実際のユーザーパターンを反映したシナリオ作成
- APIエンドポイントごとの予想最大負荷の定義
- ユーザー数増加のステップ(例:10→100→1000ユーザー)
ツール選択
-
AWS専用ツール
- AWS Lambda Power Tuning: 最適なメモリ設定を見つける
- AWS X-Ray: トレース分析に活用
-
負荷テストツール
- Artillery: JavaScript/YAMLベースでLambda連携が容易
- Locust: Pythonベースで柔軟なテストシナリオ
- JMeter: 詳細なテスト設定が可能
テスト実施のステップ
-
段階的負荷増加
- 少ない並列リクエストから開始し徐々に増加
- リクエスト数/秒を段階的に上げていく
-
監視するメトリクス
- Lambda実行時間とメモリ使用量
- コールドスタート頻度
- エラー率と429エラー(スロットリング)
- APIゲートウェイのレイテンシ
- DB接続プールの状態
-
ボトルネック特定
- APIゲートウェイのスロットリング
- Lambdaの同時実行数制限
- DB接続プール枯渇
- 外部API依存の遅延
最適化ポイント
-
Lambda設定最適化
- メモリ割り当て調整
- タイムアウト設定の見直し
- プロビジョンドコンカレンシーの検討
-
コネクションプール管理
- DBコネクションプールの適切なサイジング
- コネクション再利用の実装
-
キャッシュ戦略
- 頻繁にアクセスされるデータのキャッシュ導入
コスト管理
- 負荷テスト中のコスト監視(予想外の請求を防ぐ)
- 最適なLambda設定(メモリと実行時間のバランス)の検証
このアプローチで段階的に負荷をテストし、システムの制限を把握した上で最適化を進めることができます。