サーバーレス API 構築 - Amazon API Gateway で実現するスケーラブルな API 基盤

Amazon API Gateway と Lambda を活用したサーバーレス API の構築方法を解説します。

サーバーレス API の概念と API Gateway の位置づけ

API はモダンアプリケーションの中核であり、フロントエンドとバックエンド、マイクロサービス間、外部パートナーとの連携を担います。Amazon API Gateway は、REST API、HTTP API、WebSocket API を作成・公開・管理するフルマネージドサービスです。毎秒数十万リクエストの処理能力を持ち、トラフィックの急増にも自動的にスケールします。API Gateway の内部アーキテクチャは、リクエストの受信、認証・認可、スロットリング、バックエンド呼び出し、レスポンス変換の各ステージをパイプライン的に処理する設計です。この設計思想により、各ステージを独立して設定・最適化でき、API のライフサイクル全体を宣言的に管理できます。オンプレミスで API サーバーを運用する場合、Nginx や Kong などのリバースプロキシの構築、SSL 証明書の管理、ロードバランサーの設定、スケーリングの設計が必要です。API Gateway はこれらすべてをマネージドで提供し、API の設計とビジネスロジックの実装に集中できます。

この分野について体系的に学びたい方は、関連書籍 (Amazon) も参考になります。

REST API と HTTP API の使い分け

API Gateway は REST API と HTTP API の 2 つのタイプを提供します。REST API はフル機能の API 管理を提供し、API キー管理、使用量プラン、リクエスト/レスポンスの変換 (VTL テンプレート)、キャッシュ、WAF 統合、リクエストバリデーションなどの高度な機能を備えています。HTTP API は REST API と比較して最大 71% 低コストで、レイテンシも低く、シンプルな API やプロキシ統合に最適です。HTTP API は OIDC と OAuth 2.0 の JWT オーソライザーをネイティブサポートし、Cognito や Auth0 などの ID プロバイダーとの統合が容易です。料金面では、HTTP API が 100 万リクエストあたり 1.29 USD であるのに対し、REST API は 100 万リクエストあたり 4.25 USD です。以下は選択の判断基準です。 ``` # HTTP API を選ぶケース - Lambda プロキシ統合のみで十分 - JWT ベースの認証で対応可能 - コスト最適化を優先 # REST API を選ぶケース - API キー + 使用量プランが必要 - リクエスト/レスポンスの変換が必要 - WAF 統合やキャッシュが必要 - リクエストバリデーションが必要 ``` REST API の API キャッシュ機能は、0.5 GB から 237 GB までのキャッシュ容量を選択でき、バックエンドへのリクエストを削減してレスポンス時間の短縮とコスト削減を同時に実現します。

認証・認可と API セキュリティ

API Gateway は多層的なセキュリティ機能を提供します。Lambda オーソライザーを使えば、カスタムの認証・認可ロジックを実装でき、JWT トークン、OAuth、SAML など任意の認証方式に対応できます。Cognito ユーザープールとの統合により、ユーザー登録、サインイン、MFA、トークン管理を含む完全な認証フローを API Gateway だけで構成できます。リソースポリシーにより、特定の IP アドレス、VPC エンドポイント、AWS アカウントからのアクセスに制限できます。使用量プランと API キーにより、外部パートナーごとのレート制限とクォータ管理が可能です。AWS WAF との統合により、SQL インジェクション、XSS、DDoS 攻撃からの保護を追加できます。相互 TLS (mTLS) 認証もサポートし、クライアント証明書による双方向認証を実現します。オンプレミスの API サーバーでは、これらのセキュリティ機能を個別に実装・統合する必要があり、開発と運用の負荷が大幅に増加します。

WebSocket API とリアルタイム通信

API Gateway の WebSocket API は、双方向のリアルタイム通信をサーバーレスで実現します。チャットアプリケーション、リアルタイムダッシュボード、ゲームのマルチプレイヤー通信、IoT デバイスの制御など、持続的な接続が必要なユースケースに対応します。WebSocket API は接続管理を自動的に行い、Lambda 関数で $connect、$disconnect、$default の各ルートイベントを処理します。接続 ID を DynamoDB に保存することで、特定のクライアントへのメッセージ送信やブロードキャストが可能です。WebSocket API は最大 2 時間のアイドルタイムアウトと最大 24 時間の接続持続時間をサポートします。料金は 100 万メッセージあたり 1.14 USD、接続時間 100 万分あたり 0.285 USD です。API Gateway の WebSocket API は完全な従量課金であり、接続がない時間帯のコストはゼロです。この料金モデルの違いは、トラフィックの変動が大きいアプリケーションにおいて大きなコスト差を生みます。

API のデプロイとライフサイクル管理

API Gateway は API のバージョニングとステージ管理を組み込みで提供します。ステージ変数を使えば、dev、staging、prod の各環境で異なるバックエンド Lambda 関数やエンドポイントを指定でき、環境ごとの設定を API 定義から分離できます。カナリアリリース機能により、新バージョンの API にトラフィックの一部 (例: 10%) だけを振り向け、問題がなければ段階的に 100% に移行するデプロイ戦略を実現できます。SAM (Serverless Application Model) を使った IaC 管理では、API の定義、Lambda 関数、IAM ロールを 1 つのテンプレートで宣言的に管理できます。 ```yaml Resources: ApiFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs20.x Events: GetItems: Type: HttpApi Properties: Path: /items Method: GET ``` CloudWatch メトリクスとの統合により、API のレイテンシ、エラー率、リクエスト数をリアルタイムに監視し、異常検知時にアラームを発報できます。X-Ray との統合により、API Gateway から Lambda、DynamoDB に至るリクエストの全経路をトレースし、パフォーマンスボトルネックを特定できます。

さらに詳しく知りたい方は、関連書籍 (Amazon) で理解を深められます。

まとめ - サーバーレス API 基盤の選択

Amazon API Gateway は、サーバーレス API 基盤として REST、HTTP、WebSocket の 3 つの API タイプを包括的にサポートします。HTTP API の 100 万リクエストあたり 1.29 USD という低コスト、REST API の高度な管理機能、WebSocket API の従量課金リアルタイム通信を、ユースケースに応じて使い分けることで、最適な API 基盤を構築できます。

AWS の優位点

  • API Gateway は REST API、HTTP API、WebSocket API の 3 タイプを提供し、毎秒数十万リクエストの処理能力で自動スケールする完全従量課金サービス
  • Lambda オーソライザー、Cognito 統合、リソースポリシー、WAF 統合、mTLS、IAM ポリシー連携など多層的なセキュリティ機能を標準で提供
  • REST API のキャッシュ機能は 0.5 GB から 237 GB まで選択可能で、バックエンドリクエスト削減によるレスポンス短縮とコスト削減を同時に実現
  • SAM テンプレートによる IaC 管理とカナリアリリース機能により、API のバージョニング、ステージ管理、段階的デプロイを宣言的に制御可能
  • HTTP API は REST API と比較して最大 71% 低コストで、シンプルな API プロキシやマイクロサービスのルーティングに最適

同じテーマの記事