AWS AppSync GraphQL API 設計パターン5選|SAA-C03 頻出リアルタイム通信・データ統合完全攻略

AWS SAA-C03 で頻出の AWS AppSync を完全整理。GraphQL vs REST API Gateway の選択基準・Subscriptions によるリアルタイム通信・Pipeline Resolver での複数データソース統合・Cognito 認証フィールドレベル認可・Lambda/OpenSearch 連携の5つの設計パターンを体系化。試験シナリオを即断できる粒度で分解する。

「AppSync は “GraphQL のフルマネージドレイヤー” だ。REST API Gateway と混同されやすいが、SAA-C03 が問うのはプロトコルの違いではなく『リアルタイム通信が必要か』『複数データソースを1リクエストで結合したいか』という設計判断だ。Subscriptions による WebSocket Push・Pipeline Resolver による N+1 解消・Cognito 統合によるフィールドレベル認可——これらを即答できれば AppSync 問題は確実に取れる」 — 本記事では SAA-C03 頻出の AWS AppSync 設計パターン5選を体系化し、API Gateway との使い分けから試験シナリオを即断できる粒度まで分解する。

※ 本記事はアフィリエイト広告(Amazon アソシエイト等)を含みます


📑 目次

  1. 結論:AppSync を選ぶ判定軸
  2. AppSync の基本構造(GraphQL・リゾルバー・データソース)
  3. パターン1:AppSync vs API Gateway REST — GraphQL vs REST 選択基準
  4. パターン2:AppSync + DynamoDB Subscriptions — リアルタイムチャット設計
  5. パターン3:AppSync + Pipeline Resolver — 複数データソース統合・N+1解消
  6. パターン4:AppSync + Cognito — 認証・フィールドレベル認可設計
  7. パターン5:AppSync + Lambda / OpenSearch — カスタムロジック・全文検索統合
  8. AppSync vs API Gateway vs EventBridge 比較
  9. 試験頻出シナリオ → 解法パターン早見表
  10. 次のアクション チェックリスト
  11. 関連記事
  12. 関連サイト

1. 結論:AppSync を選ぶ判定軸

AWS AppSync は「GraphQL API のフルマネージドサービス」だ。DynamoDB・Lambda・OpenSearch・RDS など複数のデータソースを GraphQL スキーマで統一し、リアルタイム Subscriptions・オフライン同期・きめ細かい認証を組み込みで提供する。

AppSync が最適なシナリオ

シナリオ理由
チャット・ライブダッシュボードなどリアルタイム更新が必要Subscriptions(WebSocket)が組込みで即時設定可能
モバイルアプリで複数テーブルのデータを1回のAPIコールで取得したいGraphQL の1クエリで複数データソースを結合して返せる
オフラインでも動作し、再接続時にデータ同期が必要AppSync のオフライン同期(Conflict Resolution)機能がネイティブ対応
ユーザーロール・フィールド単位でデータアクセスを制御したいCognito User Pools + $ctx.identity によるフィールドレベル認可

2. AppSync の基本構造

AppSync は以下の3層で構成される。

クライアント(Query / Mutation / Subscription)
        ↓ GraphQL リクエスト
  ┌────────────────────────────┐
  │     AWS AppSync API        │
  │  ・スキーマ(SDL)定義      │
  │  ・リゾルバー(Unit / Pipeline)│
  │  ・認証設定(Cognito / IAM 等)│
  └────────────────────────────┘
        ↓ データソース呼び出し
  DynamoDB / Lambda / OpenSearch / RDS / HTTP / None

主要コンポーネント

コンポーネント役割
GraphQL スキーマ(SDL)Query・Mutation・Subscription の型定義
Unit Resolver1つのデータソースに直接マッピング(VTL または JavaScript)
Pipeline Resolver複数のデータソースを順次呼び出し(Function チェーン)
SubscriptionsMutation のトリガーで WebSocket 経由クライアントに Push
Data SourcesDynamoDB・Lambda・OpenSearch・RDS(HTTP)・None

3. パターン1:AppSync vs API Gateway REST — GraphQL vs REST 選択基準

SAA-C03 で最頻出の AppSync 判断問題。GraphQL(AppSync)と REST(API Gateway)の違いを軸で整理する。

評価項目
AppSync(GraphQL)
API Gateway(REST)
プロトコル GraphQL REST / HTTP / WebSocket
データ取得粒度 フィールド指定で必要な列だけ取得(Over/Under Fetch なし) エンドポイントごとに固定のレスポンス構造
リアルタイム Subscriptions(WebSocket)が組込み 別途 WebSocket API を構成が必要
複数データソース結合 1クエリで DynamoDB + Lambda + OpenSearch を結合 各エンドポイントが独立、クライアント側でマージ
オフライン同期 ネイティブ対応(Amplify DataStore) 対応なし(クライアント実装が必要)
向いているケース モバイルアプリ・リアルタイム・複雑なデータ関係 シンプルCRUD・外部パートナー連携・既存REST API

4. パターン2:AppSync + DynamoDB Subscriptions — リアルタイムチャット設計

チャットアプリ・ライブダッシュボードの定番構成。DynamoDB を直接データソースにすることで Lambda を挟まずに高速な読み書きを実現し、Subscriptions でリアルタイム Push を行う。

クライアントA(メッセージ送信)
  → AppSync Mutation(sendMessage)
    → DynamoDB(messages テーブルへ PUT)
      → Subscription トリガー
        → クライアントB・C・D(リアルタイム受信)

ポイント

  • Mutation の実行が Subscription のトリガーになる——AppSync が WebSocket 接続を管理するため、Lambda・SNS・SQS などの仲介は不要
  • DynamoDB の PutItem を VTL(Velocity Template Language)または JavaScript リゾルバーで直接マッピングできる
  • 接続中のすべてのサブスクライバーに即時 Push。コネクション管理は AppSync が担う

5. パターン3:AppSync + Pipeline Resolver — 複数データソース統合・N+1解消

Pipeline Resolver は「複数の Function(データソース呼び出し)をチェーンする」仕組みだ。単一の GraphQL クエリで DynamoDB・Lambda・OpenSearch の複数ソースを順次クエリし、結果を合成して返せる。

GraphQL Query: getProductDetail(id: "p001")
  ↓ Pipeline Resolver
  Function 1: DynamoDB から商品基本情報を取得
  Function 2: Lambda でリアルタイム在庫を照会
  Function 3: OpenSearch でレビュースコアを取得
  ↓ 合成して単一レスポンスとして返す

N+1 問題の解消

従来の REST 設計では「商品一覧 → 各商品の在庫を個別にN回API呼び出し」という N+1 問題が発生しやすい。AppSync の Pipeline Resolver + DynamoDB の BatchGetItem 統合を使うと、一括取得クエリに変換してリクエスト数を削減できる。


6. パターン4:AppSync + Cognito — 認証・フィールドレベル認可設計

AppSync は1つの API に複数の認証モードを同時設定できる。SAA-C03 では「ユーザー認証に Cognito を使い、管理者だけ特定フィールドを見られる」というシナリオが出題される。

認証モード一覧

認証モード向いているケース
Cognito User Poolsエンドユーザー認証(モバイルアプリ・Web フロント)
IAM 認証バックエンドサービス・Lambda・EC2 からの呼び出し
OpenID Connect外部 IdP(Okta・Auth0 等)との統合
API キー公開データ・PoC・短期プロトタイプ(本番非推奨)
Lambda オーソライザーカスタム認証ロジック(JWT 検証・DB ルックアップ等)

フィールドレベル認可のパターン

type User {
  id: ID!
  name: String!
  email: String! @auth(rules: [{ allow: owner }])
  salary: Int    @auth(rules: [{ allow: groups, groups: ["Admin"] }])
}

$ctx.identity.groups でユーザーの所属グループを参照し、リゾルバー内で認可ロジックを実装することも可能。「Cognito グループが Admin のユーザーだけが salary フィールドを読める」という設計が SAA-C03 頻出だ。


7. パターン5:AppSync + Lambda / OpenSearch — カスタムロジック・全文検索統合

DynamoDB で解決できない複雑なビジネスロジックや全文検索が必要な場合の構成。

パターン5a: AppSync + Lambda データソース

GraphQL Mutation: createOrder(input: {...})
  → AppSync Unit Resolver(Lambda データソース)
    → Lambda(在庫チェック・決済処理・DynamoDB 書き込みを実行)
      → レスポンスを AppSync 経由でクライアントに返す

Lambda をデータソースに設定するだけで、複雑なビジネスロジックをサーバーレスで実行できる。「注文時に在庫確認・決済・通知を一連で実行したい」という試験シナリオはこのパターン。

パターン5b: AppSync + OpenSearch 全文検索

GraphQL Query: searchProducts(keyword: "AWS認定")
  → AppSync Unit Resolver(OpenSearch HTTP データソース)
    → Amazon OpenSearch Service(全文検索クエリ)
      → 結果を AppSync 経由で返す

DynamoDB は全文検索が苦手(キー検索のみ)。商品・記事・ログの全文検索が必要なら AppSync + OpenSearch の組み合わせが定番。DynamoDB Stream → Lambda → OpenSearch でデータを同期し、AppSync でクエリを受け付ける構成が SAA-C03 頻出だ。


8. AppSync vs API Gateway vs EventBridge 比較

評価項目
AppSync
API Gateway(REST)
EventBridge
プロトコル GraphQL / WebSocket REST / HTTP / WebSocket イベントバス(JSON)
リアルタイム Subscriptions(組込み) WebSocket API(別途設定) なし(非同期イベント)
主な用途 モバイル/Webアプリ API REST API / マイクロサービス サービス間イベント連携
クライアント向けか フロントエンド向け フロントエンド/バックエンド両方 バックエンド間のみ
データソース統合 複数DB・Lambda を1APIで統合 単一バックエンドが基本 イベントターゲットへルーティング
認証 Cognito / IAM / OIDC / API Key / Lambda Cognito / IAM / API Key / Lambda IAM / リソースポリシー

9. 試験頻出シナリオ → 解法パターン早見表

シナリオ正解パターン理由
チャットアプリでメッセージをリアルタイムに全クライアントへ Push したいAppSync + DynamoDB + SubscriptionsWebSocket Push が組込み、DynamoDB で永続化
モバイルアプリで複数 DynamoDB テーブルのデータを1回のリクエストで取得したいAppSync + Pipeline Resolver複数データソースを1 GraphQL クエリで結合
ユーザー認証は Cognito、Admin グループだけ給与フィールドを見られる設計にしたいAppSync + Cognito User Pools + フィールドレベル認可Cognito グループ + $ctx.identity でフィールド制御
商品データは DynamoDB、検索は全文検索が必要、APIは GraphQL にしたいAppSync + DynamoDB + OpenSearch(DynamoDB Stream 同期)AppSync が両データソースを統合
注文時に在庫確認・決済・DynamoDB 書き込みを1つの API コールで実行したいAppSync + Lambda データソース複雑なビジネスロジックを Lambda に委譲
RESTful API を外部パートナーに公開したいAPI Gateway(REST)AppSync は GraphQL 専用、REST 公開には不向き
データを永続化せず、接続中クライアントに即時通知するだけでよいAppSync + None データソース + SubscriptionsNone データソースで DB を介さず Push

10. 次のアクション チェックリスト


11. 関連記事


12. 関連サイト

出典・参考情報