AppSync

AWS のマネージド GraphQL / Pub/Sub サービス

AWSAPI

AppSync とは

AWS AppSync は、GraphQL API をフルマネージドで提供するサービスである。DynamoDB、Lambda、RDS、OpenSearch、HTTP エンドポイントをデータソースとして接続し、単一の GraphQL エンドポイントから統合的にデータを取得・更新できる。リアルタイムのサブスクリプション (WebSocket) もビルトインで提供する。

API Gateway + Lambda vs AppSync

観点 API Gateway + Lambda AppSync
API スタイル REST GraphQL
データ取得 エンドポイントごとに固定 クライアントが必要なフィールドを指定
リアルタイム WebSocket API を別途構築 サブスクリプションがビルトイン
N+1 問題 REST の over-fetching GraphQL のリゾルバーで解決
認証 IAM, Cognito, API キー IAM, Cognito, API キー, OIDC
キャッシュ 自前で実装 ビルトインキャッシュ

モバイルアプリやリアルタイム機能が必要な場合は AppSync、シンプルな REST API なら API Gateway + Lambda が適する。

リゾルバーの種類

リゾルバー 説明 適用場面
VTL リゾルバー Apache Velocity テンプレートで記述 DynamoDB への直接アクセス
JavaScript リゾルバー JavaScript で記述 複雑なロジック
Lambda リゾルバー Lambda 関数を呼び出し 既存のビジネスロジック
パイプラインリゾルバー 複数のリゾルバーを連鎖 認証→データ取得→変換

JavaScript リゾルバーは Lambda を経由せずに AppSync 内で実行されるため、レイテンシとコストの両面で有利。

リアルタイムサブスクリプション

subscription OnNewMessage {
  onCreateMessage(channelId: "general") {
    id
    content
    author
    createdAt
  }
}

クライアントがサブスクリプションを登録すると、AppSync が WebSocket 接続を維持し、Mutation が発生するたびにリアルタイムでデータをプッシュする。チャット、通知、ダッシュボードの自動更新に使える。

DynamoDB との統合

AppSync は DynamoDB と直接統合でき、Lambda を経由せずに CRUD 操作を実行できる。

[クライアント][AppSync][DynamoDB]
                    ↓
              VTL / JS リゾルバーで
              DynamoDB API を直接呼び出し

Lambda のコールドスタートを回避でき、シンプルな CRUD ではレイテンシが大幅に改善する。

認証の多層化

AppSync は 1 つの API に複数の認証モードを設定できる。パブリックなクエリは API キー、ユーザー固有のデータは Cognito、管理操作は IAM、というように使い分ける。

関連書籍も参考になる。

関連用語