【AWS】APIGateway + Lambdaのメリット
サーバレスな構成でAPIを作るならLambdaだけで事足りるなって思ってました。あらためてLambdaの手前にAPIGateWayを挟む意味って?という疑問が生じたのでAIの手助けも得ながらまとめてみた。
APIGateWayを挟むメリット
1. RESTful APIの提供
API GatewayはRESTful APIを簡単に提供できるサービスです。これにより、Lambda関数をHTTPエンドポイントとして公開し、HTTPリクエストを受け取って処理することが可能になります。API Gatewayを使用することで、Lambda関数をウェブアプリケーション、モバイルアプリケーション、他のサーバーなどから呼び出すことが容易になります。
2. リクエストの管理と制御
API Gatewayはリクエストの管理と制御に優れています。例えば、以下のような機能を提供します。
認証と認可: API Gatewayは、AWS IAM、Cognito、カスタム認証ロジックなどを使って、アクセス制御を実施できます。
スロットリングとレート制限: 過剰なリクエストからLambda関数を保護するために、API Gatewayでスロットリングとレート制限を設定できます。
キャッシュ: レスポンスをキャッシュすることで、Lambda関数への負荷を減らし、レスポンス時間を短縮することができます。
3. リクエストおよびレスポンスの変換
API Gatewayはリクエストとレスポンスを変換する機能を提供します。これにより、異なるフォーマットのデータを扱うことができ、Lambda関数のコードをシンプルに保つことができます。例えば、JSON形式のリクエストをLambda関数が必要とするフォーマットに変換したり、Lambda関数のレスポンスをクライアントが期待する形式に変換したりできます。
4. ロギングとモニタリング
API GatewayはCloudWatchとの統合により、リクエストのロギングとモニタリングを提供します。これにより、リクエストのトラッキングやデバッグが容易になり、問題の早期発見と解決が可能になります。
5. セキュリティ
API Gatewayは、HTTPSプロトコルを使用してリクエストを暗号化し、データのセキュリティを確保します。また、リクエストに対する署名検証や、IPホワイトリスト/ブラックリストの設定も可能です。
RESTfulについても触れておく
ESTful(RESTful API)とは、REST(Representational State Transfer)アーキテクチャスタイルに準拠したウェブサービスの設計方式を指します。RESTは、リソース指向アーキテクチャであり、ウェブサービスが互いに通信するためのガイドラインを提供します。RESTfulなシステムの基本的な構造や原則は以下の通りです。
RESTの基本原則
リソース指向
リソースは、サービスが管理するオブジェクトやエンティティを指します。各リソースは一意のURI(Uniform Resource Identifier)で識別されます。
例: http://example.com/users/123 は、IDが123のユーザーリソースを指します。
HTTPメソッドの使用
RESTful APIでは、HTTPの標準メソッドを利用してリソースの操作を行います。主なHTTPメソッドとその意味は以下の通りです:
GET: リソースの取得
POST: 新しいリソースの作成
PUT: 既存リソースの更新
DELETE: リソースの削除
ステートレス
各リクエストは独立しており、サーバーはリクエスト間の状態を保持しません。これにより、サーバーのスケーラビリティと信頼性が向上します。
すべての情報(認証情報やセッションデータなど)はリクエストに含める必要があります。
リソース表現
リソースは異なる形式(JSON、XML、HTMLなど)で表現できます。クライアントは、Acceptヘッダーを使用して希望する形式を指定します。
例: Content-Type: application/json
自己記述的メッセージ
メッセージには、リソースの表現と必要なメタデータが含まれており、サーバーとクライアントがメッセージの解釈に必要な情報を持っています。
HATEOAS (Hypermedia as the Engine of Application State)
リソースの表現には、関連する操作やリンクが含まれ、クライアントが次に行うべき操作を理解できるようになっています。
例: ユーザーリソースの表現には、そのユーザーの注文を取得するためのリンクが含まれることがあります。
RESTful APIの構造例
以下に、典型的なRESTful APIのエンドポイント例を示します。これは、ユーザーリソースを管理するためのものです。
取得 (GET)
全ユーザーを取得: GET /users
特定ユーザーを取得: GET /users/{id}
作成 (POST)
新しいユーザーを作成: POST /users
更新 (PUT)
ユーザー情報を更新: PUT /users/{id}
削除 (DELETE)
ユーザーを削除: DELETE /users/{id}
RESTとRESTfulの違い
REST: ウェブサービスのアーキテクチャスタイルであり、原則やガイドラインを提供する理論的な枠組み。
RESTful: RESTの原則に従って設計・実装された具体的なウェブサービスやAPIを指す。
こうみていくとAPIGateway + Lambdaの構成はサーバレスではベストプラクティスといえそう。
ちなみに、APIGatewayにはWAFもアタッチできるのでセキュアの観点からも十分にメリットがあるといえる。
AWS WAFの特徴と機能
AWS WAFは、以下のような機能を提供して、ウェブアプリケーションを保護します。
ルール設定:
カスタムルール: 特定のIPアドレスのブロックや、特定のHTTPヘッダーの内容をチェックするなど、カスタムルールを作成できます。
マネージドルール: AWSやサードパーティが提供するマネージドルールを使用して、一般的な脅威(SQLインジェクション、クロスサイトスクリプティング(XSS)など)から保護できます。
レート制限:
過剰なリクエストをブロックするためのレート制限ルールを設定できます。これにより、DDoS攻撃などの防止が可能です。
監視とロギング:
AWS WAFは、CloudWatchと統合してリクエストの監視やルール違反のアラートを提供します。また、AWS WAFログをS3に保存して、後で分析することも可能です。
まずはここまでおさえておけば概要理解としては良さそう。