AppSync

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

AWSAPI

AppSync とは

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

API Gateway + Lambda vs AppSync

API Gateway + Lambda と AppSync の違いを以下にまとめる。

観点API Gateway + LambdaAppSync
API スタイルRESTGraphQL
データ取得エンドポイントごとに固定クライアントが必要なフィールドを指定
リアルタイムWebSocket API を別途構築サブスクリプションがビルトイン
N+1 問題REST の over-fetchingGraphQL のリゾルバーで解決
認証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、というように使い分ける。

関連書籍も参考になる。

この記事は役に立ちましたか?

関連用語

関連する記事