API Gateway
エンドポイントURL
HTTPS のみ公開される。
証明書はデフォルトなら AWS がいい感じに発行したやつになる。
カスタムドメインを使う場合は個別指定すればよい。
統合タイプ
AWS
AWS統合という。AWSのサービスを直接公開するような形でつかうらしい。
サービスがLambdaの場合は「Lambdaカスタム統合」とよばれる。
AWS Proxy
AWS統合では、リクエスト・レスポンスの項目マッピングを頑張る必要があるけど、こっちは不要。
サービスがLambdaの場合は「Lambdaプロキシ統合」とよばれる。
HTTP
バックエンドがHTTPエンドポイントである場合に使える。EC2とかALBとか?ElasticSearchとかでもいけるんかも
項目マッピングは必要。
HTTP Proxy
上と同じようなもんだけど、マッピングが不要でクライアント・バックエンドが直接対話するような透過的プロキシとして動くという感じなのかな〜 バックエンドのレスポンスを弄らなくてもよいなら PROXY シリーズにしておくとよいのだろう。
Mock
API Gateway がテキトーなレスポンスを返してくれるようになる。テストで便利。
認証の基本設定
コンソールで 認証が必要 をONにする
キャッシュは必然的に無効、ということになる
TTL=0, クライアントの Cache-Control: max-age=0 を同時にやっておくとなおよし
認証方式
IAMユーザに対しての認証
IAM認証の署名バージョン4
特定のIAMユーザ・グループに対する認証として使える
別のAWSアカウントに対しても使える
端的にはアクセスキー・シークレットによる認証ということ
自前のLambda関数により認証させる
Lambdaオーソライザーを使う
トークンベース, リクエストパラメータベース の2方式がある
トークンベースは JWT や OAuth トークンを使うやつ
リクエストパラメータベースはその他 HTTPヘッダ, パラメータを参照する
WebSocket の場合はこっちしか使えない
Cognito ユーザープールを使う
COGNITO_USER_POOLS タイプのオーソライザーを用意する
他のIdPを使って認証してもらうケースもこっち
IDプールを併用して一時的IAMロールを付与するパターンはけっこう出てくる
ゲストアクセス専用のIAMロールとそれ以外を分けていい感じにするとか
特定ユーザへの公開・クォータ設定
使用量プランという機能を使うとAPIキー毎に柔軟な設定ができる
カナリアリリース
新しいステージを作成してそっちで試すだけ。
ステージ変数をLambdaに伝搬させる
Lambda 側で エイリアス を使う。
メソッドリクエストのセットアップ
Lambda のリクエストパラメータとかボディとかをいい感じにセットアップする時にやる作業
Swagger/OpenAPI との対応
AWSコンソール上でインポートする機能がある
バックエンドタイムアウト
デフォルト30秒?
HTTP 504 エラーを返す