AppSync
AWS のマネージド GraphQL / Pub/Sub サービス
AppSync とは
AWS AppSync は、GraphQL API をフルマネージドで提供するサービスである。DynamoDB、Lambda、RDS、OpenSearch、HTTP エンドポイントをデータソースとして接続し、単一の GraphQL エンドポイントから統合的にデータを取得・更新できる。リアルタイムのサブスクリプション (WebSocket) もビルトインで提供する。
API Gateway + Lambda vs AppSync
API Gateway + Lambda と 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、というように使い分ける。
関連書籍も参考になる。
この記事は役に立ちましたか?
関連用語
GraphQL
クライアントが必要なデータだけを指定して取得できる API クエリ言語
GraphQL Subscription
GraphQL でサーバーからクライアントへリアルタイムデータ更新を配信する仕組み
DynamoDB
AWS のフルマネージド NoSQL データベースで、ミリ秒単位のレイテンシとシームレスなスケーリングを提供する
Amazon Cognito
Web・モバイルアプリに認証・認可機能を追加する AWS マネージドサービス
SSE
サーバーからクライアントへ一方向のリアルタイムデータストリームを HTTP で送信する仕組み
API Gateway
API のエントリーポイントとして認証、スロットリング、ルーティングを一元管理する AWS サービス