Amazon API Gateway
REST API、HTTP API、WebSocket API を作成・公開・管理するフルマネージドサービスで、Lambda や他の AWS サービスへのフロントドアとして機能する
概要
Amazon API Gateway は、あらゆる規模の API を作成、公開、保守、モニタリング、保護するためのフルマネージドサービスです。REST API、HTTP API、WebSocket API の 3 種類をサポートし、Lambda 関数、EC2 インスタンス、任意の HTTP エンドポイントをバックエンドとして接続できます。API キー管理、使用量プラン、スロットリング、リクエスト/レスポンスの変換、Cognito や IAM による認証・認可、カスタムドメイン名の設定など、API 管理に必要な機能を包括的に提供します。HTTP API は REST API より低コスト (約 70% 安価) かつ低レイテンシで、シンプルな API プロキシに適しています。WebSocket API はリアルタイム双方向通信をサポートし、チャットアプリケーションやライブダッシュボードの構築に利用できます。
REST API と HTTP API の選択基準
API Gateway には REST API と HTTP API の 2 つの HTTP ベースの API タイプがあり、要件に応じて選択します。REST API はリクエスト/レスポンスの変換 (マッピングテンプレート)、API キーと使用量プランによるアクセス制御、リクエストバリデーション、キャッシュ機能、WAF 統合、カナリアリリースなどの高度な機能を備えています。エンタープライズ向けの API や、複雑なリクエスト変換が必要な場合に適しています。HTTP API はこれらの高度な機能の一部を省略する代わりに、料金が REST API の約 30% (100 万リクエストあたり約 1.29 ドル vs 約 4.25 ドル) で、レイテンシも低くなります。JWT オーソライザー、CORS の自動設定、OpenID Connect / OAuth 2.0 統合をネイティブサポートしており、Lambda や HTTP バックエンドへのシンプルなプロキシとして十分な機能を持っています。Azure API Management が開発者ポータルや API ライフサイクル管理を含む包括的なプラットフォームであるのに対し、API Gateway はサーバーレスアーキテクチャの入口として Lambda との統合に特化しており、使っていない時間のコストがゼロになる完全従量課金が特徴です。
認証・認可とスロットリングの設計
API Gateway の認証・認可は、API タイプによって利用できるメカニズムが異なります。REST API では Cognito オーソライザー、Lambda オーソライザー (トークンベース / リクエストベース)、IAM 認証の 3 方式を選択できます。HTTP API では JWT オーソライザーがネイティブサポートされ、Cognito や Auth0 などの OIDC プロバイダーのトークンを直接検証できるため、Lambda オーソライザーを書く手間が省けます。スロットリング設定はアカウントレベル (デフォルト 10,000 rps) とステージ・メソッドレベルの両方で設定でき、バックエンドの過負荷を防止します。使用量プランと API キーを組み合わせれば、外部パートナーごとにリクエスト上限を設定し、API の利用状況をモニタリングできます。関連書籍 (Amazon) も参考になります。
ステージ管理とカナリアリリース
API Gateway のステージ機能は、同一 API の複数バージョンを並行運用するための仕組みです。ステージ変数を活用して dev/staging/prod の各環境で異なる Lambda 関数やバックエンド URL を指定でき、デプロイメントを切り替えるだけで環境間の昇格が完了します。REST API ではカナリアリリースが利用でき、新バージョンへのトラフィックを 10% から段階的に増やしながら、CloudWatch メトリクスでエラー率やレイテンシを監視し、問題があれば即座にロールバックできます。カスタムドメイン名と ACM 証明書を組み合わせれば、api.example.com のようなブランドに合った API エンドポイントを提供でき、ベースパスマッピングで複数の API を 1 つのドメインに集約することも可能です。WebSocket API はリアルタイム双方向通信をサポートし、チャットアプリケーションやライブダッシュボードの構築に利用できます。