AWS AppSync

# AWS AppSync

https://d1.awsstatic.com/webinars/jp/pdf/services/20190821_AWS-BlackBelt_AppSync.pdf

## AWS AppSync とは

  • AWS AppSync GraphQLのマネージドサービス

 

  • 代表的なWebAPI Model
    • REST-API
    • GraphQL
      • REST-API のドキュメント管理や情報取得の際のデメリットを解消する
      • GraphQL API用のOSS Query言語
      • 処理形態
        • 取得: query
        • 変更: Mutation
        • 購読: Subscription
      • クライアント/サーバー感のインターフェースがクリーンになる
      • 通信オーバーヘッドが削減される
      • APIドキュメント作成に費やす時間が不要になる
      • APIを理解するのに費やす時間が削減される
  • GraphQL の特徴
    • 型指定されたスキーマ
      • APiドキュメントを手動で記述する必要がなくなりAPIを定義したスキーマをベースに自動生成
    • クライアントからのレスポンス形式の指定
      • オーバーフェッチ、アンダーフェッチがなくなる
      • クリーンなインターフェース
    • サブスクリプションを利用したリアルタイム処理
      • クライアントはデータをサブスクライブすることでイベントドリブンに処理を実装可能

 

  • AppSync の特徴
    • リアルタイム機能とオフライン機能を簡単に実装できる
    • GraphQL マネージドサービス
    • アカウントDataSourceに接続
    • データ同期、リアルタイム、オフライン機能
    • GraphQLファサード
    • 競合の検出と解決
    • セキュリティ
  • コンセプト
    • AWS App Sync Client: 認証、オフラインロジックなどを含んだClient
    • Data Source: DynamoDB / Elasticsearch / Lambda
    • Identity: GraphQL Proxy へのリクエストの認証
    • GraphQL Proxy: リクエストのマッピング、コンフリクトのハンドリング、アクセスコントロール
    • Operator: Query/ Mutation / Subscription など GraphQL のオペレーション
    • Action; GraphQL から Subscriber への通知
    • Resolver: リクエス/ レスポンスの処理を記述する関数

 

  • ユースケース
    • リアルタイム
      • ほぼリアルタイムでデータを更新
    • コラボレーション
      • 複数ユーザーが共同編集を行うアプリケーション
      • 様々なコンテンツタイプを自動更新
    • ソーシャルメディア
  • 多様なデータソース
    • DynamoDB
    • Lambda
    • Aurora Serverless
    • Elasticsearch
    • HTTP Endpoint

 

  • 作り方
    • Schema 定義(SDL)
    • Rootスキーマを記述
    • Resolver マッピングテンプレートの記述
      • アクセスコントロール
      • 新規アイテムのデフォルト例
      • 入力のバリデーション・フォーマット
      • データの変換と整形
      • リスト、マップの加工
      • ユーザーIDに基づいたレスポンスのフィルタリング/変更
      • 複雑な権限チェック
      • Resolver でパイプラインを組んで何個かを束ねて実行可能(Pipeline Resolver
      • キャッシュを二層に分割した差分同期(Delta Sync
    • マッピングテンプレート
      • Request テンプレート
      • Response テンプレート
      • 生成方法はいろいろある。
        • 直接記述
        • No-code GraphQL API Builder を利用
        • Schemaからジェネレート
        • DynamoDBからジェネレート
    • クライアントからGraphQL Endpoint への接続設定

 

## 雑感

AppSync GraphQL のマネージドサービス。データを取得するために複雑にエンドポイントをコールしていたつらくなったREST-API 開発をしているときなどにはまりそう。

または、リアルタイム性の求められる、チャットやソーシャルメディアでも使いやすそう。認証も複数のプロバイダが利用できるようなので考える余地があると思う。

リアルタイムにデータを受け渡しして、柔軟性が求められるケースで使うのが良さそう。