Amazon API Gateway

Amazon API Gateway

https://d1.awsstatic.com/webinars/jp/pdf/services/20190514_AWS-Blackbelt_APIGateway_rev.pdf

API Gateway が管理するもの

  • インフラの管理: 可用性とスケーラビリティ
    • マネージドサービス
  • APIの管理:設定やデプロイの制御
    • Canary リリース
  • 認証と認可:アクセス制御
    • リソースポリシーによるアクセス制御
  • 流量制御と保護:スロットリング

API Gateway が扱うAPI

  • REST
    • エンドポイント作成の方法
      • エッジ最適化
      • リージョン
        • 同じリージョンからのリクエストならレイテンシ削減
        • リージョンに直接ルーティング
      • プライベート
        • PrivateLink でのみ接続可能
    • API 作成の方法
      • 既存APIのクローン
      • Swagger ファイルのインポート
  • WebSocket
    • ルートを選択する(事前定義ルートもある)

その他の機能

  • 認証・認可
    • IAM アクセス権限
      • IAMユーザのクレデンシャルを利用
      • HTTP リクエストヘッダに所定の仕様で値をセット
    • Lambdaオーソライザ
      • 認証処理をLambda に委譲
      • 独自の認証方式やOAuthなどの認証方式を組み込める
    • Congnito オーソライザ
      • 指定したCognito ユーザプールを元に事前に認証
      • Cognito 認証を行い取得したトークンをAuthorizationヘッダに指定
  • 統合タイプ
    • Lambda 関数
    • HTTP
      • パビリックなURLとメソッドを指定して呼び出す
      • 呼び出しの際はAPI Gatewayからのアクセスであることを示すクライアント証明書の利用が可能
    • Mock
      • 固定的な値を返す
    • AWS サービス
      • 他のサービスを直接呼び出せる
    • VPCリンク
      • VPC内のリソースへアクセス
  • ロットリング
    • APIキーと使用量プランによりスロットリングを実現
    • 呼び出し回数制限の設定を可能、上回った場合は429エラーを返す(リトライ実装は開発者)
    • APIキーは認証目的には使わない(計測のための識別用途)
  • カスタムドメイン
    • 証明書とDNSを指定することで独自ドメイン名で登録したAPIを呼び出し可能
      • ACMなどを利用して、パプリック証明書を取得
      • Route53などを利用して、DNSエイリアスやCNAMEとして登録
  • キャッシュ
    • キャッシュ容量
    • データ暗号化
    • 有効期限(TTL)
    • キーごとのキャッシュ無効化
    • キャッシュヒット時はスロットリングの対象外
  • リソースポリシー
    • アクセス元の制限
  • カナリアリリース
    • 各ステージに紐づく特別なステージ(Canary)を作成し、リクエストを指定の比率で流せる
      • Canary をメインに翔鶴
      • Canary を削除
  • WAF 連携(WebACLとの関連付け)
  • X-Ray 連携
    • リクエストのトレースと分析およびデバッグ可能
    • X-Ray連携を有効かするだけで利用可能

雑感

API Gateway から他のサービスを呼び出せることで、オンプレ基盤から徐々にAWSに移行することができたりしそうだなと感じた。ただWebAPIを外部に公開するだけではなく、運用やリリースで利用できる機能が揃っていて