AWS AppSync
GraphQL API をフルマネージドで構築・運用でき、DynamoDB や Lambda など複数のデータソースを統合的にクエリできるサービス
概要
AWS AppSync は、GraphQL API をフルマネージドで提供するサービスです。フロントエンドから単一のエンドポイントで複数のデータソース (DynamoDB、Aurora、OpenSearch、Lambda、HTTP エンドポイント) にアクセスでき、必要なデータだけを 1 回のリクエストで取得できます。リアルタイムデータ同期 (WebSocket ベースのサブスクリプション)、オフラインデータ同期、組み込みのキャッシュ機能を備えており、モバイルアプリやリアルタイムダッシュボードの構築に適しています。Cognito、IAM、API キー、Lambda オーソライザーによる柔軟な認証・認可も標準で利用できます。
リゾルバーとデータソースの設計
AppSync の中核はリゾルバーで、GraphQL のフィールドとデータソースを接続する役割を担います。VTL (Velocity Template Language) リゾルバーはリクエスト・レスポンスのマッピングテンプレートを記述する従来型で、DynamoDB への直接アクセスなどシンプルな操作に向いています。JavaScript リゾルバーは 2023 年に追加された新しい方式で、APPSYNC_JS ランタイム上で動作し、VTL より直感的にロジックを記述できます。パイプラインリゾルバーは複数のデータソースを順番に呼び出す構成で、認可チェック → データ取得 → 変換のような多段処理を 1 つの GraphQL フィールドで実現できます。実務では JavaScript リゾルバーを基本とし、複雑なビジネスロジックが必要な場合のみ Lambda データソースに委譲する設計が推奨されます。
サブスクリプションとオフライン同期
AppSync のリアルタイム機能は WebSocket ベースのサブスクリプションで実現されます。クライアントが特定のミューテーションを購読すると、データ変更が即座に全接続クライアントに配信されます。チャットアプリ、コラボレーションツール、ライブダッシュボードなど、複数ユーザーが同じデータをリアルタイムに共有する場面で威力を発揮します。Azure API Management の GraphQL 機能にはサブスクリプションがなく、リアルタイム通信には Azure SignalR Service を別途組み合わせる必要がある点で、AppSync はリアルタイム用途に一日の長があります。オフライン同期は Amplify DataStore と組み合わせて実現し、ネットワーク切断中のデータ変更をローカルに蓄積し、再接続時にサーバーと自動的に同期します。コンフリクト解決戦略として、Automerge (自動マージ)、Optimistic Concurrency (楽観的排他制御)、Lambda (カスタムロジック) の 3 方式を選択できます。GraphQL の関連書籍 (Amazon) で体系的に学べます。
認証モデルとマルチデータソース統合
AppSync は 1 つの API に対して複数の認証モードを同時に設定できます。Cognito ユーザープール (ユーザー認証)、IAM (サービス間通信)、API キー (パブリックアクセス)、Lambda オーソライザー (カスタム認証) を組み合わせ、GraphQL スキーマのフィールドレベルで認証モードを指定できます。たとえば、記事の閲覧は API キーで誰でもアクセス可能にし、記事の作成・編集は Cognito 認証を要求する設計が可能です。データソース統合では、1 つの GraphQL クエリで DynamoDB からユーザー情報を取得し、同時に OpenSearch からの検索結果と Lambda で計算した推薦スコアを組み合わせて返すといった、複数バックエンドの統合が AppSync の真価です。注意点として、リゾルバーには実行時間の制限 (30 秒) があり、重い集計処理やバッチ操作には向きません。そのような処理は Lambda データソースに委譲し、非同期で結果を返す設計にする必要があります。