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、というように使い分ける。
関連書籍も参考になる。