HASURA、AWS AppSync - GraphQL PaaS比較
あくまで現状の理解です。加筆、修正すると思います。
HASURA
- GraphQL PaaS
- DBにテーブルを作るとQuery/Mutationエンドポイントを自動生成するスタイル
- Actionsは独自エンドポイント。スキーマを拡張し、HTTP経由で処理する。AWS Lamda相当を自前で用意する感じに見える。
- PostgreSQL, MySQL, SQL Server, Google BigQuery, Oracle, MongoDB
- カスタマイズされたGraphiQLが使いやすい
- Subscriptionが動くのかが試せてない。できるらしいけど、どうやってDBの変更を検知するんだ?
- Free tier 60 requests per minute らしいけど、すぐ止まる。実験が全然進まない。サブスクは$99/月からで敷居が高い。
- 他GraphQLをガッチャンコ(Schema Stiching)できる。ApolloでいうFederation
- 全く試してないがAuthenticationはアクセスごと、JWTでなど選べるようだった。Authorizationはテーブルごと、カラムごと、行ごとに、MongoDB風のJSONベースのマッチャーで許可させるよう。画面でコチコチやるしかないのか?
- 使い始めやすく高機能な印象。DB直挿しエンドポイント+ブラウザクライアントである程度まで作れ、Actions拡張もし易そう。ただユーザ管理、Actionsの構築は別でやる必要がある。サービスを跨いだとき、スピードが出るのだろうか?
AWS AppSync
- GraphQL PaaS
- スキーマを画面でぽちぽち作る。
- ResolverはVTL(Apache Velocity Template Language)。 Lamda、DynamoDBアクセスなどご自由に
- AppSyncはAmplify推し。AmplifyはAWSの様々なサービスを初期化できる入り口だが、AppSyncに対しては、独自ディレクティブを交えた正規化スキーマを書かせ、それが展開されると(それが実際のスキーマ)、エンドポイントや、DB Table(Dynamo限定)の型設定を自動生成する。これが強力だが、恐らく一度ejectすると威力が失われ管理が一気に大変になる
- 独自ディレクティブの中でも
@auth
は鬼そうで、Cognito User Poolと連携した、GraphQL Fieldごと x ロールごとの権限管理が可能そう。 - "AppSync" というだけありSubscription周りが強力、DynamoDBと連携したSubscriptionエンドポイントを簡単に作れる。
- アクセス単位課金で実験できたので、安く試せた。
- AWS AppSyncは「AWS API GatewayのGraphQL版」という感じで、VTLさえわかれば動きもシンプル、使い始めやすい印象。AmplifyこそAppSyncの価値を引き出すフレームワークと思うが、正直初見では仕様が広大すぎて、影響が把握しづらい印象。(AWS初心者の感想です)