API Gateway

API のエントリーポイントとして認証、スロットリング、ルーティングを一元管理する AWS サービス

AWSAPI

API Gateway とは

Amazon API Gateway は、REST APIWebSocket API のエントリーポイントとして、認証、スロットリング、CORS、リクエスト変換を一元管理するマネージドサービスである。Lambda と組み合わせてサーバーレス API を構築する。2015 年 7 月に発表され、サーバーレスアーキテクチャの中核を担っている。

API Gateway が担う役割は、マイクロサービスアーキテクチャにおける「API ゲートウェイパターン」そのものだ。クライアントは個々のバックエンドサービスを直接呼び出すのではなく、API Gateway を経由することで、認証・認可・レート制限・ログ記録が一元化される。

REST API vs HTTP API

API Gateway には 2 つの API タイプがある。2019 年に HTTP API が追加され、シンプルなユースケースでは HTTP API が推奨されるようになった。

観点REST APIHTTP API
コスト$3.50/100 万リクエスト$1.00/100 万リクエスト
レイテンシ中程度低い
WAF 統合AWS WAF を直接関連付けられる関連付けられない。前段に CloudFront を置いて WAF をかける
API キャッシュステージ単位で応答をキャッシュできる機能自体が無い
API キー + 使用量プラン発行と流量制限を API Gateway 側で完結できる無し。呼び出し元の識別と流量制限は自作する
リクエストバリデーションモデル定義で必須項目や型を検証できる無し。検証は統合先のコードで行う
認証IAM, Cognito, Lambda AuthorizerIAM, Cognito, JWT
WebSocket扱えない。双方向通信は独立した WebSocket API を別に作って併用する扱えない。WebSocket API の併用で補う点は REST API と同じ
推奨WAF・キャッシュ・API キーが必要な場合コスト重視、シンプルな API

REST API の機能が不要なら HTTP API を選ぶ。コストが 3.5 倍違うのは大きい。

ステージとデプロイ

API Gateway はステージ (dev, stg, prod) ごとに異なる設定を持てる。ステージ変数を使えば、同じ API 定義で環境ごとに異なる Lambda 関数やエンドポイントを呼び分けられる。

/prod → Lambda:prod-function
/dev  → Lambda:dev-function

デプロイは「API の変更をステージに反映する」操作で、ステージごとに独立してデプロイできる。

カスタムドメイン

API Gateway にカスタムドメイン (api.example.com) を設定できる。ACM で証明書を発行し、Route 53 でエイリアスレコードを作成する。ベースパスマッピングで複数の API を 1 つのドメインに統合できる。

api.example.com/v1/orders → Orders API
api.example.com/v1/users  → Users API

API キー + 使用量プラン

外部パートナーに API を提供する場合、API キーと使用量プランでアクセスを制御する。REST API でのみ利用可能。

設定説明
API キークライアントの識別トークン
使用量プラン日次/月次のリクエスト上限
スロットリング秒間リクエスト数の制限
バースト瞬間的なリクエスト数の上限

CloudFront との組み合わせ

CloudFront との 組み合わせを図で示す。

ユーザー → CloudFront (キャッシュ + WAF) → API Gateway → Lambda

CloudFront を前段に置くことで、エッジキャッシュによるレイテンシ削減、WAF によるセキュリティ強化、カスタムドメインの柔軟な管理が可能になる。HTTP API は WAF を直接統合できないため、WAF が必要な場合は CloudFront 経由で適用するのが一般的だ。

よくある落とし穴

よくある落とし穴を以下にまとめる。

問題対策
29 秒タイムアウト長時間処理は SQS + Lambda に分離、または Step Functions
ペイロード上限 10 MB大きなファイルは S3 presigned URL で直接アップロード
CORS エラーHTTP API は自動処理、REST API は手動設定が必要
コールドスタートProvisioned Concurrency で Lambda のコールドスタートを排除
ステージ変数の未設定デプロイ後にステージ変数が空でエラーになるケースに注意

API Gateway の背景や設計思想は関連書籍に詳しい。

この記事は役に立ちましたか?

関連用語

関連する記事