サーバー ソフトウェア 公開日 2026.04.23 更新日 2026.10.24

API Gatewayとは?Lambdaの前段で何をしているのか

API Gatewayとは何かを、Lambdaの前段でHTTPリクエストを受ける入口として、役割、HTTP APIとREST APIの違い、認証、制御、監視まで初心者向けに整理します。

目次(22項目)

先に要点

  • API Gateway は Lambda の前に置くHTTPの入口で、ルーティング・認証・スロットリング・監視をまとめて担う。
  • 入口は API Gateway だけではない。Lambda Function URL(最安・最小)、ALB(既存ECS/EC2と同居)との選定フローを先に持つと迷わない。
  • API Gateway の HTTP API と REST API は別物。API key・Usage Plan・リクエスト検証・WAF直結はREST固定、JWTオーソライザーとCORS自動化と低料金はHTTP API側。
  • Lambda authorizer はキャッシュがデフォルトで全ルート共有。識別ソースに $context.routeKey を足さないと、別エンドポイントの権限が使い回されて事故になる。

先に要点

API Gateway は、外から来るHTTPリクエストを受けて、Lambda や他のバックエンドへ渡す入口です。AWS公式でも、アプリケーションがデータやビジネスロジックへアクセスするための front door(表玄関)と説明されています。

初心者向けにざっくり言うと、API Gatewayは「URLを受ける窓口」で、Lambdaは「実際の処理をする中身」です。

役割何をするか
API Gatewayリクエスト受付、ルーティング、認証、スロットリング、レスポンスの入口整理
Lambda実際の処理実行
CloudWatchログやメトリクスを見る

つまり、Lambdaをそのまま外へ見せるのではなく、API Gatewayを前に置いて「どう受けるか」を整理するイメージです。

この記事の確認時点

この記事は、2026年10月時点の AWS公式ドキュメント(What is Amazon API Gateway? / Choose between REST APIs and HTTP APIs / Control access to HTTP APIs with Lambda authorizers / Amazon API Gateway pricing / REST API と HTTP API のクォータ)と、AWS の料金データを確認して整理しています。料金や仕様は更新されるため、本番採用時は必ず最新の公式ページで確認してください。

API Gatewayとは何か

API Gatewayは、AWSで API を作成・公開・保守・監視・保護するためのマネージドサービスです。REST API、HTTP API、WebSocket API の3タイプを扱えます。

ただ、初心者が最初に出会うのはたいてい「Lambdaの前段に置くHTTPの入口」です。たとえば次のような流れになります。

  1. 1
    クライアントがアクセス

    ブラウザやアプリが https://example.com/users へHTTPリクエストを送る

  2. 2
    API Gatewayが受ける

    発行されたエンドポイントでリクエストを受け付ける

  3. 3
    ルーティング

    パスとメソッド(GET /users など)に従って統合先を決める

  4. 4
    Lambdaが処理

    統合されたLambda関数が実行され、結果を返す

  5. 5
    レスポンス整形

    API GatewayがHTTPレスポンスとしてクライアントへ返す

このため、「API Gateway = LambdaをURLとして外へ出すための表玄関」と考えると分かりやすいです。

まず決めるべきは「入口を何にするか」

ここが今回いちばん伝えたいところです。「LambdaをHTTPで呼ぶ=とりあえずAPI Gateway」と反射的に決めると、あとで料金や運用が重くなります。入口の候補は実際には3つあります。

Lambda Function URL

Lambda単体に直接HTTPSのURLを付ける機能。追加サービス不要で最安・最小構成。ただし認証は AWS_IAM か NONE の2択のみ、WAF を直接付けられない(前段に CloudFront が要る)。エンドポイントはインターネット経由のみで、PrivateLink(VPCエンドポイント)には対応しない。

API Gateway

JWT/Lambda オーソライザー、リクエスト検証、Usage Plan、WAF直結、キャッシュなどのAPI管理機能を持つ(リクエスト検証・Usage Plan・WAF・キャッシュは REST API のみ)。サーバーレスのAPI入口の王道。

ALB(Application Load Balancer)

すでにEC2/ECSを動かしていてLambdaも混ぜたい時に有利。Cognito連携やWAFも使える。リクエスト単位ではなく時間+LCU課金。

判断は次のフローで切るとブレません。

  1. 1
    呼び出し元はAWS内部の別リソースだけか

    別のLambda・EC2・ECSからIAM認証で叩くだけなら、Lambda Function URL が最小構成。ブラウザ公開やAPIキー配布が要るなら次へ。

  2. 2
    処理が29秒を超える/レスポンスが大きいか

    API Gatewayの統合タイムアウトは既定で最大29秒(HTTP APIは最大30秒で引き上げ不可、REST APIのリージョン/プライベートAPIはクォータ引き上げを申請できる)。それを超える長時間処理は非同期化か別構成を検討。ペイロードは最大10MB。

  3. 3
    すでにALB配下でEC2/ECSを運用しているか

    既存のALBにLambdaターゲットを足す方が、入口が1つにまとまって運用が楽。新規にAPI Gatewayを増やさない。

  4. 4
    API管理機能(キー配布・従量課金・検証・WAF)が要るか

    要るなら API Gateway。さらにそのうちREST固定の機能を使うかで HTTP API / REST API を選ぶ(次章)。

観点Lambda Function URLAPI GatewayALB
認証IAM か なしIAM/Lambda authorizer/Cognito/JWT(HTTP API)/API key(REST API)OIDC/Cognito 連携
WAF直結不可(CloudFront経由)REST APIのみ可(HTTP APIは不可)可
カスタムドメイン非対応(CloudFront併用)対応対応
タイムアウト最大15分(Lambda側)既定で最大29秒(HTTP APIは30秒。REST APIのリージョン/プライベートAPIは引き上げ申請可)長め(設定可)
課金モデルLambda呼び出しのみリクエスト従量時間+LCU
向く場面内部呼び出し・最小コスト公開API・管理機能が必要既存ALB配下に同居

ざっくり言うと、内部からIAMで叩くだけなら Function URL、ブラウザ公開や管理機能が要るなら API Gateway、既存のALBがあるなら ALB という分け方が現実的です。

HTTP APIとREST APIの違い(ここで選定を間違えやすい)

API Gatewayに決めた後、もう一段の分岐があります。HTTP API と REST API は名前が似ているだけの別サービスで、機能と料金がはっきり違います。

最大の注意点は、API key・Usage Plan・リクエスト検証・WAF直結・プライベートエンドポイント・キャッシュ・実行ログや X-Ray トレース・レスポンスストリーミングなどは REST API 固定で、HTTP API には存在しないことです(CloudWatch へのアクセスログはどちらも出せます)。逆にHTTP APIは機能を絞ったぶん料金が安く、JWTオーソライザー(OIDC/OAuth 2.0ネイティブ)と自動デプロイを持ちます。公式の比較ページも「REST API の機能が要らなければ HTTP API」という整理です。

機能HTTP APIREST API
料金(受信100万リクエスト、バージニア北部 / 東京)$1.00 / $1.29(月3億件まで)$3.50 / $4.25(月3億3,300万件まで)
API key / Usage Plan(従量課金・配布)なしあり(REST固定)
リクエスト/レスポンス検証・変換(VTL)なしあり(REST固定)
WAF直結なしあり(REST固定)
JWTオーソライザー(OIDC/OAuth2)組み込みありなし(Cognito オーソライザーか Lambda authorizer で代替)
CORS自動化あり(設定だけ)手動で組む場面が多い
プライベートAPIエンドポイントなしあり
レスポンスストリーミングなしあり

具体的な落とし穴を1つ。「外部パートナーにAPIキーを配って、契約プランごとに月間リクエスト上限を切りたい」という要件。これは Usage Plan の機能ですが、HTTP API には存在しません。HTTP APIで作り始めてから「キー発行と従量制限が要る」と気づくと、REST APIへの作り直しになります。API keyや従量課金を売り物にするAPIなら、最初からREST APIを選ぶのが正解です。

月300万リクエストの目安(バージニア北部) HTTP API $3 REST API $10.5 月額・リクエスト分のみ(東京は $3.87 / $12.75)

料金の目安も押さえておきます(2026年10月に AWS の料金データで確認)。月300万リクエスト程度なら、バージニア北部で HTTP API が $3、REST API が $10.5、東京では $3.87 と $12.75 です(いずれも月額・リクエスト分のみ)。Lambdaの実行料金やデータ転送(料金ページの例では $0.09/GB)、REST APIのキャッシュ(0.5GBでバージニア北部 $0.02/時 ≒ 月約 $15、東京 $0.028/時 ≒ 月約 $20)は別途です。無料利用枠は、料金ページでは新規顧客向けに REST・HTTP とも月100万リクエスト(最大12か月)と案内されていますが、2025年7月15日以降に作成したアカウントはクレジット制の新しい無料枠に変わっているので、自分のアカウントで何が有効かは請求コンソールで確認してください。

Lambda authorizer の落とし穴(キャッシュ共有)

認証をコードに書きたくない時、Lambda authorizer(自作の認可関数)をAPI Gatewayの前に挟む構成がよく使われます。ここに実務で踏みやすい地雷があります。

API Gatewayはオーソライザーの結果をキャッシュします。キャッシュキーは「識別ソース(identity source)」、つまりトークンを取り出すヘッダーなどの値です。問題は、HTTP API の場合、このキャッシュがデフォルトでそのオーソライザーを使う全ルートに共有されることです(公式ドキュメントに明記されています)。

項目内容
現象GET /reports は許可、DELETE /users/{id} は本来拒否のはずなのに、同じトークンで連続で叩くと削除が通ってしまう。
原因オーソライザーが「ルートごとに違うポリシー」を返しているのに、キャッシュキーがトークンだけ。最初に /reports で生成された許可ポリシーがTTLの間、全ルートで使い回される。
確認手順CloudWatch でオーソライザーLambdaの呼び出し回数を見る。連続リクエストで呼び出しが1回しか増えていなければキャッシュヒット。ログに到達したルートを出して、想定と違うルートで再評価されていないか照合する。
回避識別ソースに $context.routeKey を追加し、ルートごとにキャッシュを分ける。あるいはオーソライザーで「広い許可」を返さず、後段のLambda側でルートとリソースの権限を必ず再チェックする。
同じトークン キャッシュ(共有) GET /reports 本来は許可 DELETE /users 許可ポリシーが TTLの間 拒否のはずが通る
識別ソースに $context.routeKey を足すと、ルートごとにキャッシュが分かれる

ポイントを整理します。

  • キャッシュTTL(authorizerResultTtlInSeconds)の最大は3600秒(1時間)。TTLが長いほど、権限変更や失効が反映されるまで最大1時間ずれる。即時失効が要るならTTLを短く(例: 0〜60秒)する。
  • TTLを0にすると毎リクエストでオーソライザーが呼ばれ、レイテンシとLambda料金が増える。「速さ」と「権限の鮮度」はトレードオフ。
  • オーソライザーで Allow を返す対象を "Resource": "*" のように広く書くと、上記のキャッシュ共有と相まって他APIまで通る危険がある。返すポリシーのリソースは必要最小に絞る。
「前段にオーソライザーを置いたから安全」ではない

最終的な認可は処理側のLambdaでも持つのが安全側の設計です。

Lambdaの前段で何をしているのか

ここで改めて、API Gatewayが入口で担う役割を整理します。

役割1

リクエストの受付とルーティング

外部からのHTTPリクエストを受け、GET /users はこの統合、POST /orders はこの統合、のようにパスとメソッドで振り分けます。Lambdaにいちいちルーティングを書かせず、入口側で整理できます。

役割2

認証とアクセス制御

IAMポリシー、Lambda authorizer、HTTP APIならJWTオーソライザー、REST APIならAPI keyと、入口側で認証を持てます。Lambdaのコードだけで守るのではなく、手前で弾ける点が価値です。

役割3

スロットリングと保護

スロットリング(流量制限)、CORS 対応、REST APIならWAF直結など、入口として必要な保護を一括で持てます。バックエンドが過負荷で落ちる前に、入口で受け方を整えられます。

役割4

監視

CloudWatch のログ・メトリクス、CloudTrail での変更追跡で、入口視点の運用が可能です。Lambdaのログだけ見ていると、認証で弾かれたのか到達前に落ちたのかが切り分けにくくなります。

API Gatewayがやや重く感じる場面

何でもAPI Gatewayが最適とは限りません。

呼び出し元がAWS内部の別リソースだけ

Lambda Function URL + IAM の方が安くシンプル

すでにALB配下でEC2/ECSを運用

ALBにLambdaターゲットを足す方が入口が1つにまとまる

API管理機能(キー配布・検証・キャッシュ)をほぼ使わない

HTTP APIで十分、あるいはFunction URL

29秒を超える長時間処理

既定の統合タイムアウト(REST 29秒・HTTP 30秒)に当たる

決め打ちしない

API Gatewayは便利ですが、「AWSでAPIっぽいものは全部これ」と決め打ちしない方が安全です。

API Gatewayに関するよくある質問

Q. 最初に選ぶのは HTTP API と REST API のどちら?

A. 「APIキー配布・Usage Planによる従量課金・リクエスト検証・WAF直結・プライベートエンドポイント・キャッシュ・レスポンスストリーミング」のどれかが要るならREST API。それらが不要で、JWT認証・低料金を重視するならHTTP API。迷ったらHTTP APIで始め、REST固定機能が出てきたら作り直す前提で。

Q. Lambda Function URL ではダメなのですか?

A. 呼び出し元がAWS内部だけ(IAM認証で十分)で、WAF・カスタムドメイン・APIキーが不要なら Function URL が最小・最安です。逆に、ブラウザから公開する・WAFを付ける・カスタムドメインを使う・キーを配るなら API Gateway を選びます。

Q. ALB との違いは?

A. ALBはEC2/ECS向けの汎用ロードバランサーで、Cognito連携やWAFも使えます。すでにALB配下のサービスがあるならLambdaターゲットを足す方が楽です。API管理機能(キー・Usage Plan・リクエスト検証・キャッシュ)が標準装備な点はAPI Gatewayが有利です。

Q. 料金はどれくらい?

A. バージニア北部では受信100万リクエストあたりHTTP APIが $1.00、REST APIが $3.50(東京は $1.29 と $4.25)。月300万リクエストならバージニア北部でHTTP API 約 $3、REST API 約 $10.5(リクエスト分のみ)。データ転送、REST APIのキャッシュ(0.5GBでバージニア北部 約 $0.02/時、東京 約 $0.028/時)は別途。無料枠は料金ページでは月100万件(最大12か月)と案内されていますが、2025年7月15日以降の新規アカウントはクレジット制なので請求コンソールで確認してください。

Q. Lambda authorizer のキャッシュで権限が混ざるのはなぜ?

A. キャッシュキーが識別ソース(トークンなど)だけで、デフォルトでAPI内の全ルート共有のためです。ルートごとに違う権限を返すなら、識別ソースに $context.routeKey を足してルート別キャッシュにします。TTL最大は3600秒で、長いほど失効反映が遅れます。

Q. CORS 対応はどうする?

A. HTTP APIなら設定で許可オリジン・ヘッダー・メソッドを指定するだけでプリフライト(OPTIONS)も自動応答します。REST APIは手動でOPTIONSメソッドとヘッダーを組む場面が多く、Lambda側で返すパターンもあります。

Q. WebSocket やオンプレ連携もできますか?

A. WebSocket APIでチャットやリアルタイム通知のサーバーレス構成が組めます。オンプレやプライベートな ECS/EC2へは VPC Link 経由で内部のALB/NLBに接続でき、API Gatewayを「公開フロント + 既存サービスのプロキシ」として使えます。

まとめ

API Gateway は、Lambdaの前でHTTPリクエストを受ける入口です。ただし入口の選択肢は Function URL・API Gateway・ALB の3つあり、まず入口を何にするかを選定フローで決めるのが先です。

API Gatewayに決めたら、次はHTTP API と REST APIの分岐。API key・Usage Plan・リクエスト検証・WAF直結が要るならREST固定です。認証を Lambda authorizer で組むなら、キャッシュが全ルート共有である点を理解し、$context.routeKey とポリシーの最小化で守る。この3つを押さえると、サーバーレス構成の入口設計がぐっと事故になりにくくなります。

この順で読むとつながりやすい

  1. AWSで最初に覚えたい基本用語まとめ|EC2・IAM・S3・VPCのつながりを整理
  2. Lambda
  3. このAPI Gateway記事
  4. REST API
  5. 認証(JWT・IAM)やスロットリング、Webhook設計

参考リンク

あとで見返すならここで保存

読み終わったあとに残しておきたい記事は、お気に入りからまとめて辿れます。