「AWS Black Belt Online Seminar Amazon API Gateway」の自分向けメモ
API Gateway語感はなんとなく分かるけど......レベルの人向け
まずAPIとは
- プログラムやソフトウェア同士がやり取りをするための取り決め(IF仕様も含む)
- APIにもいくつか種類があるがそのうちのWeb APIがAPI Gatewayの対象領域
- Web APIの特徴は他システムとの緩やかな連携、エコシステムとの親和性
- 課題
- インフラ管理が必要(サーバー管理は本質ではない)
- APIのバージョンや設定値の管理が必要
- 認証認可の考慮が必要
- 流量制御と保護(スロットリングへの対策)
概要
API Gatewayとは
- クライアントからのリクエストを受け付ける窓口となるAWSサービス
- リージョンサービス
- フルマネージドサービス(オートスケール、サーバー管理不要)
- CloudFrontとの併用も可能(レイテンシ削減可能)
ユースケース
- パブリックなWeb API基盤の提供
- プライベートなWeb API基盤の提供
- AWSサービスのAPI化
- サーバーレス構築
API新規作成の流れ
- APIの設計
- プロトコル種別とエンドポイントタイプ選択
- APIの設定
- デプロイとステージ設定
※既存のRESTなAPIからのクローンで作成することも可能
プロトコル種別
- RESTとWebSocketの2種類可能
- REST:ステートレス(単一HTTPメッセージで完結する通信、セッション管理なし)なAPIの実装
- WebSocket:ステートフル(双方向のリアルタイム通信)なAPIの実装
RESTのエンドポイントタイプ
- エッジ最適化
- まずはエッジロケーション(CloudFront)にルーティング
- リージョン
- リージョンに直接ルーティング
- 同一リージョン内のレイテンシ削減
- プライベート
- パブリックアクセスされない
- VPCエンドポイント経由でのみアクセス可能
REST APIの場合
リソースとメソッド
- ツリー構造にてリソースを定義し、各ブランチにHTTPメソッドを指定
- デプロイ単位はリソース単位
メソッド設定
- 4つの設定がある
- リソースとメソッドを指定して、一意のパラメータをバックエンドに渡せる
- リクエストとレスポンス、それぞれでパラメータの加工が可能
WebSocket APIの場合
ルート
- 2つのURLを提供
- イベントをRouteとして定義する
ルート選択式
- URLパスは1つ、受信データ(JDON)の中身にどのルートを選択するか記述する
ルート設定
- 3つの設定がある
ステージ設定
- 作成したAPIを指定したステージにデプロイする
- ステージ:環境設定
- 複数のエンドポイントをステージで容易に準備できる
認証認可
- Rest:メソッド単位で設計可能
- API単位で設定
- 認証方法は以下
- IAM権限
- Lambdaオーソライザー
- Cognitoオーソライザー
統合タイプ
- Lambda:リクエスト内容を処理する
- HTTP:外部サービス等パブリックなところにアクセス
- Mock:固定値を返す
- AWSサービス:AWSサービスをラップして公開
- VPCリンク:VPCリソースにアクセス
※Lambda、HTTP、VPCリンクはプロキシ統合を設定可能(リクエストをパススルー)
リクエストレスポンス変換
- バックエンドに処理を渡す前にデータ形式の変換が可能
- バックエンドから渡されたデータをクライアントに返す前にデータ形式の変換が可能
ログ
- 実行ログ、アクセスログをlogsに出力可能
- アクセスログは任意に設計可能
- メトリクス設定可能
RestAPI キャッシュ
- ステージ毎にキャッシュ
- バックエンドのトラフィック削減
リソースポリシー
- APIから見て、どこからのアクセスを許可するかを指定できる
- 特定のAWSユーザーアカウントからしか呼び出せないなどの設定ができる
カナリアリリース
- 部分公開機能
- 特別なステージ「Canary」を作成し、リクエストを指定の比率でCanaryに流せる
AWS WAFとの連携
- SQLインジェクション等を防げる
X-Ray連携
- 呼び出しトレースの記録が可能
- Lambadaも併せて、End2Endでトレース可能
クライアント証明書
- 外部サービスの利用時にステージに設定した証明書を利用可能
利用料金
以下に依存する
- APIコール数
- メッセージ要求数