Amazon API Gateway 概要
Amazon API Gatewayの概要をまとめる。
API Gateway
APIとは
- Application Programming Interfaceの略称。
- プログラムやソフトウェア同士がやり取りするための取り決め・仕様、機能の提供方法。
API 提供時の共通課題
-
インフラ管理:可用性とスケーラビリティの保証
-
API管理:設定やデプロイの制御
-
認証・認可:アクセス制御
...
API Gatewayとは
API Gatewayが扱うAPI
以下の2種類のAPIを扱うことができる。
- REST
- REST= Representational state transfer
- 1HTTPメッセージで1操作情報を扱う(基本)
- 扱う情報をURIで表現する「リソース」として定義。それらをHTTPメソッド(POST,PUT,GET,...)表現で操作
- Websocket
- HTTP上での、クライアント-サーバー間双方向通信仕様
- 1コネクションで継続的なデータ送受信を行う(ステートフル)
REST APIエンドポイントタイプ
REST APIの場合、クライアントから見たアクセス先のエンドポイントの性質を以下の3種類のタイプから選択。
- エッジ最適化
- 一旦エッジロケーション(CloudFrontディストリビューション)にルーティングする。
- リージョン
- リージョンに直接ルーティング
- プライベート
- VPC内からのみアクセス可能
API作成の流れ
- API設計
- 要求および仕様を確認
- プロトコル種別とエンドポイントタイプを選択
- REST をプロトコルとして選択
- リージョン、エッジ最適化、プライベートからエンドポイントを選択(RESTの場合)
- リソース&メソッド設定
- リソースとメソッド
- 「/」を最上位としたツリー構造にて「リソース」を定義。各リソースに受け付けるHTTPメソッドを指定 (パスパラメータの利⽤も可能)。
- 例
- エンドポイント
https://<api-id>.execute-api.<region-id>.amazonaws.com/<stage-name>/…
- API(REST) 例:PetStore
- リソース:
/
- リソース:
/pets
- GET
- リソース:
/{petId}
- GET,PUT,DELETE,...
- リソース:
- リソース:
- エンドポイント
- 認証の設定や、受け付けるクエリパラメータ、必須とするHTTPヘッダなど「リクエ ストの受付」に関する設定。
- ルーティング先バックエンドの指定、リクエストの変換。
- レスポンス内容の変換やステータスコードのマッピング。
- リクエストに対する最終的なAPIGatewayとしてのレスポンス。
- リソースとメソッド
- デプロイとステージの設定
- ステージ=デプロイ先環境。prod,staging,dev
- ステージ名は、エンドポイントURLの一部として利用。
https://<api-id>.execute-api.<region-id>.amazonaws.com/prod/…
https://<api-id>.execute-api.<region-id>.amazonaws.com/staging/…
その他
- 既存APIのクローンやSwagger設定(Yaml)をインポートによる作成が可能。
API Gatewayのユースケース
- インターネットからアクセス可能なパブリックなWeb APIの提供。
- 企業グループ内でのプライベートなWeb APIの提供。
- Dynamo DBなどAWSサービスを独⾃のWeb API化する⼿段として利⽤。
- サーバーレスアーキテクチャの実現する⼿段として利⽤。
よく見る構成
認証・認可
アクセス制御パターン
Open
- APIを保護する必要がない場合。 誰もがAPIへのアクセスを許可されている状態。
IAMアクセス権限
- AM UserやRoleで発行されるアクセスキーを利用してアクセスを検証。
- 該当API Gatewayの呼び出し権限をIAM UserやRoleにアタッチされている場合かつ, アクセスキーが正当なものである場合は呼び出し可。
Cognito Authorizer
- Cognito User Poolと接続し, 発行されたOAuthトークンの検証をAPI Gatewayで実施し、API呼び出しを制御。
Lambda Authorizer
- Lambda関数にトークンなどの認証情報を渡してAPI呼び出しを制御。