Amazon API Gateway の設計パターン - REST API と HTTP API の選定基準
HTTP API と REST API の選定基準を明確にし、Cognito・Lambda オーソライザーの認証パターンとスロットリング設計の実践手法を紹介します。
REST API と HTTP API の選定基準
API Gateway は REST API と HTTP API の 2 種類を提供しています。HTTP API は 2019 年に登場した新しいタイプで、REST API の主要機能をカバーしつつ、料金が最大 71% 安く、レイテンシも低く設計されています。Lambda 関数や HTTP エンドポイントへのプロキシが主な用途であれば HTTP API を選択すべきです。REST API を選ぶべきケースは、API キーと使用量プランによるサードパーティ向け API の公開、リクエスト/レスポンスの変換 (マッピングテンプレート)、WAF との統合、エッジ最適化エンドポイント、リクエストバリデーション機能が必要な場合です。新規プロジェクトでは HTTP API をデフォルトとし、HTTP API にない機能が必要な場合にのみ REST API を検討するアプローチを推奨します。
認証・認可パターン
API Gateway は複数の認証方式をサポートしています。Cognito ユーザープールオーソライザーは、Cognito が発行する JWT トークンを API Gateway が自動検証する方式です。トークンの検証ロジックを自前で実装する必要がなく、最も手軽に認証を導入できます。Lambda オーソライザーは、カスタムの認証ロジックを Lambda 関数で実装する方式です。独自のトークン形式、外部 IdP との連携、IP アドレスベースの制御など、柔軟な認可ロジックが必要な場合に使用します。Lambda オーソライザーの結果はキャッシュ可能で、TTL を設定することで認証リクエストの重複実行を削減できます。IAM 認証は AWS の SigV4 署名でリクエストを認証する方式で、AWS サービス間の内部通信に適しています。
スロットリングと使用量プラン
API Gateway のスロットリングはトークンバケットアルゴリズムで実装されています。アカウントレベルのデフォルト上限はリージョンあたり 10,000 リクエスト/秒で、バーストは 5,000 リクエストです。ステージレベルとメソッドレベルでより細かい制限を設定でき、特定のエンドポイントがバックエンドを過負荷にすることを防止できます。使用量プランは REST API 固有の機能で、 API キーごとに日次・月次のリクエスト上限とスロットリングレートを設定します。外部パートナーに API を公開する場合、パートナーごとに異なるレート制限を適用できます。 429 Too Many Requests レスポンスを受け取ったクライアントは、指数バックオフでリトライする実装が推奨されます。 API 設計のアーキテクチャを網羅的に学ぶなら、技術書 (Amazon)を参照してください。
API Gateway の料金
HTTP API は 100 万リクエストあたり約 1.00 ドルで、REST API の 3.50 ドルと比較して約 71% 安価です。WebSocket API は 100 万メッセージあたり約 1.00 ドルに接続時間の課金 (100 万分あたり約 0.25 ドル) が加算されます。REST API のキャッシュを有効にすると、キャッシュメモリのサイズに応じた時間課金 (0.5 GB で約 0.02 ドル/時) が発生します。Lambda オーソライザーのキャッシュ TTL を適切に設定し、認証リクエストの Lambda 呼び出し回数を削減することもコスト最適化に有効です。無料枠は最初の 12 か月間、HTTP API と REST API それぞれ 100 万リクエスト/月が含まれます。
まとめ
API Gateway はサーバーレスアーキテクチャの入口として、認証・スロットリング・モニタリングを API レイヤーで一元管理するサービスです。HTTP API をデフォルトの選択肢とし、エンタープライズ機能が必要な場合に REST API を選択する判断基準を持つことで、コストとレイテンシを最適化できます。