API Gateway vs ALB — Lambda の前段の選択基準
Lambda で API を作ると、すぐ次に出てくる質問が前段です。API Gateway を置くか、ALB にぶら下げるか、それとも Function URL で直接開くか。結論を先に書くと、トラフィックが少ないか変動が大きければリクエスト単位課金の API Gateway HTTP API、常時大量トラフィックか既に ALB があるなら固定費構造の ALB、認証を自前で処理する単一関数の Webhook なら無料の Function URL です。 料金モデルがリクエスト単位と時間単位に分かれるため、月間リクエスト数がわかれば計算はほとんど終わります。ALB 自体の機能は ALB vs NLB で扱いました。料金は us-east-1 基準です。
一目でわかる比較 #
| 項目 | HTTP API | REST API | ALB | Function URL |
|---|---|---|---|---|
| 料金モデル | リクエスト単位 | リクエスト単位 | 時間 + LCU | 無料(Lambda 料金のみ) |
| 単価 | 100 万件あたり約 $1.00 | 100 万件あたり約 $3.50 | 月約 $16 + LCU あたり $0.008/時 | なし |
| アイドルコスト | 0 | 0 | 月約 $16 から | 0 |
| 認証 | JWT、IAM、Lambda オーソライザー | IAM、Cognito、API キー、Lambda オーソライザー | OIDC、Cognito | IAM またはなし |
| 使用量プラン・API キー | なし | あり | なし | なし |
| レスポンスキャッシュ | なし | ステージキャッシュあり | なし | なし |
| WAF 接続 | 不可(CloudFront 経由が必要) | 可能 | 可能 | 不可 |
| VPC 内部ターゲットの混在 | VPC リンクが必要 | VPC リンクが必要 | 標準対応(EC2・ECS と混在ルーティング) | 不可 |
料金モデル — 交差点は月 1,600 万件付近 #
HTTP API は 100 万件あたり約 $1.00 の純粋なリクエスト単位課金です。トラフィックがなければ 0 円で、スパイクが来てもリクエスト数の分だけ払います。ALB は逆に、存在するだけで月約 $16(時間あたり $0.0225)がかかり、処理量に応じて LCU 料金(時間・LCU あたり $0.008)が加わります。
固定費と変動費の交差点を計算すると、ALB の基本料金約 $16 は HTTP API のリクエスト 1,600 万件分です。月間リクエストが数百万件以下なら HTTP API が確実に安く、数千万件を超えて億単位になると ALB の固定費構造が有利になります。月 1 億件なら HTTP API は約 $100 ですが、ALB は LCU を含めても数十ドル台に収まることが多いです。ただし LCU は新規接続数、アクティブ接続数、処理バイト、ルール評価数の最大値で計算されるため、大きいレスポンスや接続の多いワークロードは LCU 料金を別途検算する必要があります。
REST API は HTTP API の 3.5 倍の単価です。それでも選ばれる理由は機能です。API キーと使用量プラン(顧客ごとのクォータ・スロットリング)、ステージキャッシュ、リクエスト・レスポンス変換、WAF の直接接続は REST API にしかありません。外部の顧客に API を商品として売る形なら REST API の単価は機能の対価で、社内サービスの API ならその機能を使う場面がないため HTTP API が基本です。
Function URL は関数に HTTPS エンドポイントを無料で付ける機能です。認証は IAM だけで、カスタムドメイン、スロットリング、WAF がないため、GitHub の Webhook 受信のように呼び出し元が明確な単一関数のエンドポイントに向いています。公開 API の前段として使うには保護の仕組みが足りません。
料金の外にある決定要素 #
既に ALB があるかどうか。 ECS や EC2 のサービスが ALB の後ろで動いているなら、同じ ALB にパスベースのルールで Lambda ターゲットグループを追加するのが最も安くて単純です。固定費は既に払っているので Lambda 側の限界コストは LCU の増加分だけで、ドメインと証明書の管理も 1 か所にまとまります。コンテナから Lambda へ、あるいはその逆へ段階的に移行するとき、トラフィックをルール単位で移せるのも ALB 統合の利点です。
認証をどこで処理するか。 JWT の検証だけなら HTTP API の JWT オーソライザーが設定だけで済み、最も簡単です。ALB も OIDC 認証をリスナーで処理できます。Cognito ユーザープール、カスタムオーソライザー、API キーの配布まで必要なら API Gateway 系が合います。
制限と保護が必要か。 スロットリングは API Gateway 系の基本機能です。ALB にはリクエスト制限の機能がなく、WAF のレートベースルールで代替します。HTTP API は WAF を直接付けられないという逆方向の穴があり、WAF が必須要件なら REST API か ALB、または CloudFront を前に重ねる構成になります。
タイムアウトも違います。 API Gateway は統合タイムアウトが 29 秒で、長時間のリクエストには使えません。ALB はアイドルタイムアウトを長く取れますが、Lambda ターゲットのレスポンスサイズ制限などの細かい制約は両方で確認が必要です。コールドスタートが重なるとタイムアウトの余裕はさらに減りますが、対策は前の記事で扱いました。
選択の手順 #
- 呼び出し元が 1 つだけの Webhook かを見ます: そうなら Function URL で終わりです。無料で管理するものがありません。
- 月間リクエスト数で料金モデルを選びます: 数百万件以下か変動トラフィックなら HTTP API、常時数千万件以上なら ALB 側の総額を計算します。
- 既存 ALB の有無を確認します: あるなら Lambda ターゲットグループの追加が限界コスト最小です。新しく ALB を作るのは、トラフィックがその固定費を正当化するときだけです。
- API キー・使用量プラン・キャッシュが必要なら REST API に上げます: 外部顧客向けの API 商品が典型です。社内 API に REST API を使っているなら、HTTP API に下げるのが手軽な削減になります。
- WAF・スロットリング要件を最後に検証します: HTTP API + WAF の組み合わせが必要になると、CloudFront を重ねるか REST API・ALB に変える構造変更が必要になるため、先に確認します。
まとめ #
- 料金モデルが本質です。HTTP API は 100 万件あたり約 $1.00 の変動費、ALB は月約 $16 + LCU の固定費構造で、交差点は月 1,600 万件付近です。
- 社内 API の基本は HTTP API です。REST API の 3.5 倍の単価は、API キー、使用量プラン、キャッシュ、WAF 直結が必要なときにだけ払います。
- 既に ALB があるなら Lambda ターゲットグループの追加が最も安い選択です。コンテナと Lambda を 1 つのドメインで混在させられます。
- Function URL は無料ですが IAM 認証だけなので、呼び出し元が明確な Webhook 専用です。公開 API の前段としては保護が足りません。
- 29 秒のタイムアウト、WAF 接続の可否、LCU の検算が、後から見つかる制約 3 点です。アーキテクチャを確定する前に確認します。