Amazon API Gatewayとは ― APIの受付窓口
API Gatewayは、
Amazon API Gatewayとは、APIの入口を作り、リクエストをバックエンドに渡すサービス
Lambdaで作った処理をWebアプリやスマホアプリから呼ぶには、前にAmazon API Gatewayを置きます。認証や呼び出し回数の制限をバックエンドの手前で行い、許可したリクエストだけをLambda関数などに届けます。
多くのAPIを1か所にまとめる考え方は、Web APIの記事でAPIゲートウェイとして説明しています。API Gatewayは、これをAWSのサービスにしたものです。
AWSは、API Gatewayをアプリの「玄関口」と説明しています。その奥に置くバックエンドは、Lambda関数・EC2で動くアプリ・ほかのWebアプリなどです。Lambdaと組み合わせれば、サーバーレス構成で利用者からの要求を受ける部分になります。AWSのドキュメントも、API Gatewayをそう位置づけています。
リクエストがAPI Gatewayを通ってLambdaに届くまで
利用者のアプリは、API GatewayのURLにHTTPSでリクエストを送ります。API Gatewayは、設定に従って認証と回数の上限を確認します。許可されたリクエストだけがLambda関数に届き、それ以外はAPI Gatewayが拒否します。
Lambda関数に接続するときは、プロキシ統合という方式をよく使います。この方式では、API Gatewayがリクエストのヘッダー・パス・本文を1つのイベントにまとめます。このイベントをLambda関数に渡します。
Lambda関数は、決められた形式で応答を返します。API Gatewayは、それを利用者へのHTTPの応答に変換します。
Lambda関数をHTTPで呼ぶ方法は、API Gatewayのほかに関数URLもあります。AWSのドキュメントは、試作や簡単なアプリには関数URLを勧めています。一方、API Gatewayが向くのは利用者の多い本番のAPIだと説明しています。認証・スロットリング・キャッシュを使いたい場合も同じです。
バックエンドの処理を待つ時間には、上限があります。REST APIでは、バックエンドの応答を待つ時間が既定で最大29秒です。リージョンのAPIなどでは、申請で延長できます。
REST API・HTTP API・WebSocket APIの違い
API Gatewayで作れるAPIは3種類です。REST APIとHTTP APIは、どちらもリクエストを受けて応答を返す形式のAPIです。REST APIは機能が多く、HTTP APIは機能を絞った分だけ安く使えます。
| 項目 | REST API | HTTP API |
|---|---|---|
| 特徴 | 機能が | 機能を |
| Lambda関数との | できる | できる |
| 認証の | IAM・Cognito・Lambdaオーソライザー・リソースポリシー | IAM・Lambdaオーソライザー・JWTオーソライザー |
| APIキーと | ある | ない |
| キャッシュ | ある | ない |
| AWS WAF | 付けられる | 付けられない |
| エンドポイントの | エッジ最適化・リージョン・プライベート | リージョンだけ |
| 変更の | 手動で | 手動か、 |
AWSのドキュメントは、次の機能が必要ならREST APIを選ぶよう勧めています。APIキー・利用者ごとの上限・リクエストの検証・AWS WAF・プライベートなエンドポイントです。これらが不要なら、HTTP APIで十分です。どちらも、Lambda関数やHTTPのエンドポイント、ほかのAWSのサービスに接続できます。
REST APIのエンドポイントには3つの種類があります。既定のエッジ最適化は、利用者に近いCloudFrontの拠点を通してリクエストを受けます。リージョンのエンドポイントは、同じリージョンからの利用に向きます。プライベートのエンドポイントは、VPCの中からだけ呼べます。
WebSocket APIは、接続を保ったまま双方向にやりとりする
WebSocket APIは、利用者のアプリとの接続を保ったまま、双方向にメッセージをやりとりします。REST APIと違い、バックエンドから、接続中の利用者へメッセージを送れます。チャットや、状態の変化をすぐ知らせる通知に向きます。
届いたメッセージは、内容に応じてルートに振り分けられます。接続を始めるときは$connect、切るときは$disconnectのルートが呼ばれます。どのルートにも当てはまらないメッセージは、$defaultのルートに届きます。
認証で、APIを呼んでよい相手を決める
API Gatewayは、Lambda関数を呼ぶ前に、リクエストの送信者を確認できます。選べる確認方法は、APIの種類によって違います。どの方法でも、許可されないリクエストはLambda関数に届きません。
- IAM:IAMの記事で説明したポリシーで、APIを呼んでよいユーザーやロールを決めます。3種類のAPIで使えます
- Amazon Cognitoのユーザープール:利用者はサインインしてトークンを受け取ります。このトークンをリクエストのAuthorizationヘッダーに付けて送ります。REST APIで使えます
- Lambdaオーソライザー:API Gatewayが、自分で書いた確認用のLambda関数を呼びます。その関数が、許可するかどうかを返します。REST APIでは、IAMのポリシーの形式で返します
- JWTオーソライザー:HTTP APIで、JWTという形式のトークンを検証します。Cognitoのトークンも、この方法で検証します
トークンを使って権限を渡す仕組みは、OAuthの記事で説明しています。Lambdaオーソライザーが拒否すると、API Gatewayは403などのステータスコードを返します。
APIキーは、認証の方法には含まれません。AWSのドキュメントは、APIへのアクセスを決める認証や認可にAPIキーを使わないよう求めています。APIキーは、次の節で説明する使用量プランで、呼び出し元を識別するために使います。
スロットリングで、呼び出しの数を抑える
API Gatewayは、1秒あたりのリクエスト数に上限を設けています。上限を超えた分を止めることを、スロットリングと呼びます。止められたリクエストには、429 Too Many Requestsが返ることがあります。
上限は、1秒あたりの数と、一時的に許容する量の2つで決まります。既定の上限は、1つのアカウントの1つのリージョンにあるAPI全体で数えます。1秒あたり10,000件で、一時的に許容する量は5,000件です。一部のリージョンでは、それぞれ2,500件と1,250件です。
1秒あたりの数は、申請で引き上げられます。一時的に許容する量はAWSが決め、アカウントの側では変更できません。上限で止められたアプリは、時間を置いてから再送します。
この上限の範囲内で、APIのステージやメソッドごとに、より低い上限を設定できます。REST APIでは、使用量プランを使うと、APIキーごとに頻度の上限と期間ごとの回数の上限を決められます。ただし、AWSのドキュメントは、費用の管理やアクセスの遮断の手段としてスロットリングに頼らないよう注意しています。攻撃のリクエストを止めるには、AWS WAFをREST APIに付けます。
キャッシュで、同じ応答を速く返す
REST APIでは、ステージごとにキャッシュを用意できます。キャッシュを有効にすると、API Gatewayはバックエンドの応答を設定した秒数の間だけ保存します。保存している間は、バックエンドを呼ばずに保存した応答を返します。呼び出しが減り、応答も速くなります。
保存する秒数は既定で300秒、最大で3,600秒です。既定でキャッシュの対象になるのは、GETのメソッドだけです。キャッシュの料金は、大きさに応じて1時間ごとにかかります。無料利用枠の対象にはなりません。
要件から、APIの種類と使う機能を選ぶ
ここまでの機能は、APIの種類によって使えるものが違います。次の図で作りたいAPIの要件を選ぶと、向くAPIの種類・使う機能・その理由が切り替わります。
- APIの
種類 - HTTP API
- 使う
機能 - Lambda関数との
統合 - 理由
- HTTP APIは、
機能を 絞った 分だけREST APIより 安く 提供されています。 REST APIに しかない 機能が 不要なら、 HTTP APIを 選びます。
- APIの
種類 - REST APIか
HTTP API - 使う
機能 - Amazon Cognitoの
ユーザープール、 または Lambdaオーソライザー - 理由
- 利用者は
ユーザープールに サインインして トークンを 受け取り、 リクエストに 付けて 送ります。 API Gatewayが トークンを 検証し、 正しい ものだけを 許可します。 HTTP APIでは、 Cognitoの トークンを JWTオーソライザーで 検証します。
- APIの
種類 - REST API
- 使う
機能 - 使用量プランと
APIキー - 理由
- 使用量プランは、
APIキーで 呼び出し元を 識別し、 キーごとに 頻度と 回数の 上限を 決めます。 この 機能が あるのは REST APIだけです。 APIキーは、 誰が 呼んで よいかを 決める 認証には 使いません。
- APIの
種類 - REST API
- 使う
機能 - ステージの
キャッシュ - 理由
- キャッシュを
有効に すると、 設定した 秒数の 間は バックエンドを 呼ばずに 保存した 応答を 返します。 既定は 300秒、 最大は 3,600秒です。 キャッシュの 大きさに 応じて、 1時間ごとに 料金が かかります。
- APIの
種類 - REST API
- 使う
機能 - AWS WAFの
Web ACLを ステージに 付ける - 理由
- AWS WAFを
付けられるのは、 REST APIです。 HTTP APIには 付けられません。
- APIの
種類 - WebSocket API
- 使う
機能 - $connect・$disconnect・$defaultなどの
ルート - 理由
- WebSocket APIは、
利用者との 接続を 保ったまま、 双方向に メッセージを やりとりします。 バックエンドから、 接続中の 利用者へ メッセージを 送れます。
REST APIにしかない機能が1つでも必要なら、REST APIを選びます。マイクロサービスで分けたサービスの前にAPI Gatewayを置く使い方は、マイクロサービスの記事で説明しています。
ステージとデプロイで、devとprodを分ける
API Gatewayでは、作ったAPIをデプロイしないと利用者から呼べません。デプロイは、ある時点のAPIの設定のスナップショットです。ステージは、そのデプロイにdevやprodのような名前を付けて、呼べる状態にしたものです。
ステージの名前は、APIのURLに入ります。既定のドメイン名のREST APIなら、URLは次の形です。
https://
たとえば、testのステージで動作を確認し、問題がなければprodのステージにデプロイします。REST APIは、メソッドや認証などを変更するたびに、ステージへデプロイし直します。HTTP APIでは、変更を自動でデプロイする設定も選べます。
キャッシュ・スロットリング・ログの設定は、ステージごとに決めます。ログと実行状況は、CloudWatchに送って確認できます。
料金は、呼び出しの数と転送したデータの量で決まる
API Gatewayには、最低料金や前払いがありません。REST APIとHTTP APIの料金は、受けたAPIの呼び出しの数と、外部へ転送したデータの量で決まります。呼び出しの単価は100万回あたりで決まり、月の呼び出しが多いほど段階的に下がります。
HTTP APIでは、1回のリクエストが512 KBを超えると、512 KBごとに1回の呼び出しとして数えます。WebSocket APIは、送受信したメッセージの数と、接続していた時間の合計で決まります。メッセージは32 KBごとに1件と数えます。REST APIのキャッシュを使うと、前の節で説明した1時間ごとの料金が加わります。
新しくAWSを使い始めた利用者には、無料利用枠があります。以上の仕組みは、2026年10月30日にAWSの料金ページで確認したものです。AWS全体の料金の考え方は料金の記事にまとめています。単価は、API Gatewayの料金ページで確認してください。
参考にした資料
- AWS「What is Amazon API Gateway?」(定義、玄関口としての役割、バックエンドの例、サーバーレスでの位置づけ)
- AWS「Choose between REST APIs and HTTP APIs」(REST APIとHTTP APIの機能の違い)
- AWS「Overview of WebSocket APIs in API Gateway」(双方向のやりとり、ルート)
- AWS「Control and manage access to REST APIs in API Gateway」とHTTP APIs・WebSocket APIsの同じ項目(認証の方法)
- AWS「Control access to REST APIs using Amazon Cognito user pools as an authorizer」(トークンの受け取りと送り方)
- AWS「Use API Gateway Lambda authorizers」(Lambdaオーソライザーの流れ、401・403)
- AWS「Throttle requests to your REST APIs for better throughput in API Gateway」(スロットリング、429)
- AWS「Amazon API Gateway quotas」とREST APIのクォータ(アカウントの上限、待つ時間の上限)
- AWS「Usage plans and API keys for REST APIs in API Gateway」(使用量プラン、APIキーを認証に使わないこと)
- AWS「Cache settings for REST APIs in API Gateway」(キャッシュの秒数、GETだけ、料金)
- AWS「Deploy REST APIs in API Gateway」と「Stages for HTTP APIs in API Gateway」(デプロイとステージ、URLの形、自動デプロイ)
- AWS「API endpoint types for REST APIs in API Gateway」(エッジ最適化・リージョン・プライベート)
- AWS「Lambda proxy integrations in API Gateway」(プロキシ統合)
- AWS「Select a method to invoke your Lambda Event Function using an HTTP request」(関数URLとの選び分け)
- AWS「Amazon API Gateway pricing」(料金の決まり方。2026-10-30確認)
練習問題(全5問)
正解:APIの
API Gatewayは、
正解:REST APIの
使用量プランは、
正解:429 Too Many Requests
設定した
正解:WebSocket API
WebSocket APIは、
正解:APIを
REST APIは、
選んでから「採点する」を押すと、解説つきで答え合わせができます。