Edited at

【備忘録・まとめ】AWS API Gateway 開発者ガイド


出典

Amazon API Gateway 開発者ガイド


まとめ


  • APIを外部に公開するためのマネージド高機能HTTPプロキシサーバ

  • 主な機能


    • APIの管理


      • 公開・バージョン管理

      • エンドポイントURIとリソースの対応



    • API利用者のアクセス管理および制限


      • 認証・認可の確認

      • 呼び出し回数

      • 発信元セグメントなど



    • AWS内部サービスを外部に公開する窓口


      • 内部サービスに対して、外部リクエストをプロキシするイベントソース






要点

実用に際して重要なものだけ抜粋、補足。


Amazon API Gateway の概念

Amazon API Gateway の概念

以下、主要なものだけ


  • デプロイ


    • リソースおよびメソッドのポイントインタイムスナップショット

    • リリースされたAPIのスナップショット



  • API 開発者


    • APIを開発しているAWSユーザー



  • APIエンドポイント


    • エッジに最適化された API エンドポイント


      • CloudFront経由でデプロイされるエンドポイント

      • APIリクエストが最寄のCloudFront接続ポイント(POP)にルーティングされる



    • リージョンの API エンドポイント


      • APIリクエストが、CloudFrontディストリビューションを経由せず、リージョン固有のAPI Gatewayへ直接飛ぶ



    • プライベート API エンドポイント


      • パブリックインターネットからは分離されていて、アクセス権限を付与されているAPI GatewayのVPCエンドポイントを使用してのみアクセスできる





  • APIキー


    • APIを使用者を識別する英数字の文字列

    • APIキーをLambdaオーソライザーまたは使用量プランと一緒に使用して、APIへのアクセスを制御する



  • ステージ


    • 例: 'dev'、'prod'、'beta'、'v2' など

    • ライフサイクル状態への論理的な参照

    • API ステージは API IDとステージ名によって識別される



  • 統合リクエスト


    • API Gatewayへのリクエストから、バックエンドへのリクエスト(イベント)の形式にマッピングするAPI Gatewayのインターフェース



  • 統合レスポンス


    • バックエンド → API Gateway APIに流れるデータ(ステータスコード、ヘッダ、ペイロード等)の対応を定義するインターフェース



  • マッピングテンプレート


    • 「Velocity Template Language (VTL)」で表現されるスクリプト。統合リクエスト、統合レスポンスで使われる。



  • メソッドリクエスト


    • 外部からAPI Gateway APIへのリクエストの形式(パラメータや本文)を定義するインターフェース



  • メソッドレスポンス


    • API Gateway APIから外部へのレスポンス形式を定義するインターフェース



  • モデル


    • リクエストまたはレスポンスペイロードのデータ構造を指定するデータスキーマ

    • ペイロードの検証にも使われる



  • プロキシ統合


    • 簡略化された API Gateway 統合の設定

    • Lambdaプロキシ統合の場合、API Gatewayは、バックエンドのLambda関数への入力としてリクエスト全体を送信



  • 使用量プラン


    • スロットリングとクォータ制限を設定

    • 個々のクライアントAPI キーに適用される




アクセスコントロール

API Gateway で API へのアクセスをコントロールする

以下、主要なものにだけ補足。


  • リソースポリシー


    • 特定のソース IP アドレスまたは VPC エンドポイントから API へのアクセスを許可または拒否するリソースベースのポリシー



  • IAMロールとポリシー


    • IAMロールとポリシー記述言語で設定できる柔軟な権限定義



  • Cross-Origin Resource Sharing (CORS)


    • クロスドメインのリソースリクエストへの API の応答を制御




  • Lambdaオーソライザー


    • APIメソッドへのアクセスを制御するために使用するLambda関数

    • かなり強力で多用途



  • Amazon Cognito ユーザープール

  • クライアント側 SSL 証明書

  • 使用量プラン


    • APIキーによる、キー毎の利用頻度制限




デプロイとステージ


  • APIデプロイを作成し、ステージと関連付けることで、API利用者は各デプロイのAPIの機能を利用できるようになる。

  • デプロイは各API実装のインスタンスのような概念

  • ステージは各デプロイへのエイリアスのような概念


Canaryリリース


  • 1つのステージに対して2つデプロイを割り当て、そのステージへのリクエストを特定割合で2つのデプロイにランダムに振り分けられる


スロットリング


  • API Gatewayの主要機能の1つで、詳細に把握すべき重要項目

  • スロットリングの対象粒度毎に、メソッド辺り、クライアント辺り、アカウント辺りがある

  • 設定された頻度を超える呼び出しがあると、その呼び出しを制限する


実際のAPI呼び出し


  • Javascriptやその他のランタイムからAPI GatewayのAPIをコールする場合、一般的には認証や認可の確認が必要になるが、全部実装すると大変

  • そのため、API Gatewayが各APIに合わせたSDKを自動生成してくれる仕組みにはなっているのだが、コレも結構面倒

  • Node.jsなんかだとこの辺が使いやすそう


APIにカスタムドメイン名を付ける


  • デフォルトでは各リソースのエンドポイントとしてhttps://<api-id>.execute-api.<region>.amazonaws.com/<stage>の規則に従ったURLが発行されるが、このホストのドメイン名を自前のものに差し替える事ができる

  • ただし、SSL証明書をACMないし自前で準備したりする必要がある