SAAの模試で、DynamoDBを使用してリアルタイムデータ処理を行うWebアプリケーションの構築方法という問題で間違えてしまいました。

AppSyncを使うのが正解らしいのですが、AppSyncってなんぞ!?となったので調べました。

AppSyncとは

AWS AppSync は、サーバーレスの GraphQL および Pub/Sub API を作成し、単一のエンドポイントを通じて安全にデータの照会、更新、公開を行うことで、アプリケーションの開発を簡素化します。

AWS AppSync(アプリデータをリアルタイムで保存、同期)| AWS

な、なんか凄そう。

AWSAppSync開発者は、安全でサーバーレスの高性能なGraphQLおよびPub/Sub APIを使用して、アプリケーションやサービスをデータやイベントに接続できます。以下を実行すると、AWSAppSync次の操作を実行できます。

  • 1 つの GraphQL API エンドポイントから 1 つ以上のデータソースのデータにアクセスする。
  • 複数のソースの GraphQL API を 1 つの統合された GraphQL API に結合します。
  • リアルタイムのデータ更新をアプリケーションに公開します。
  • 組み込みのセキュリティ、モニタリング、ロギング、トレースを活用し、オプションのキャッシュにより低レイテンシを実現できます。
  • お支払いいただくのは、API リクエストと配信されたリアルタイムメッセージに対してのみです。

とは AWS AppSync - AWS AppSync

つまり、AppSyncとは「フルマネージドなGraphQLのためのサービス」と言えるでしょう。

(Pub/Sub APIというのはGraphQL WebSocketのことを言っているようです)

しかしDynamoDBとAppSyncだけでGraphQLかPub/SubAPIの作成ができるのは結構すごいですね。

(DynamoDB + API Gateway + LambdaでAPI組むより遥かに楽そう)

お値段は次の要素で決まるようです。

  • クエリとデータ変更操作
    • 4.00USD/クエリおよびデータ変更操作 100 万回
  • リアルタイム更新
    • 2.00USD/リアルタイムアップデート 100 万回
    • 0.08USD/AWS AppSync サービスへの接続 100 万分
  • キャッシュ
    • データ処理速度を更に加速させる
    • 次の表の通り
キャッシュで使用するインスタンスタイプの料金表

料金例は一ヶ月21.29USDとなっており、結構お手頃価格です。

参考料金

APIを選択する

では早速使ってみます。

AppSyncのトップページから「APIを作成」をクリックします。

AppSyncトップページ

まず最初に、「GraphQL APIs」か「Merged APIs」から選択をすることになります。

GraphQL APIsを選択した場合

「Merged APIs」を選択した場合は以下のようになります。

Merged APIsを選択した場合

GraphQL APIsはわかりますが、MergedAPIってなんだろう…?

MergedAPIとは

AWS AppSyncマージされたAPI機能では、AWS AppSyncさまざまなデータドメインのチームが独立してAPI(GraphQLスキーマ、リゾルバー、データソース、関数など)を作成してデプロイし、それらを1つのマージされたAPIにまとめることができます。

APIsのマージ AWS AppSync - AWS AppSync

複数のAppSyncをまとめるための機能、ということですね。

Merged APIsのフロー

GraphQL APIsの作成

ではまた戻って、GraphQL APIsを作成します。

DynamoDBのテーブルも含めて1から作りたいので、「Design from scratch」を選択します。

次の画面で、API名を入力します。

VPCでプライベートに使用するための設定もあるみたいですね。

AWS AppSync プライベート API の使用 - AWS AppSync

続いて、リソースを今作るか後で作成するか選択します。

DynamoDBをこの時点で一緒に作ってしまうことにしました。

作ったモデルはidや名前、作成時間などの情報を含んだものです。

オプショナルなフィールドとしてarchive_timeも作成しました。

次へを押すと確認画面になります。

確認ができたらAPIを作成します。

作成完了までは少しかかります。

作成できたら、早速試してみましょう。

クエリを実行をクリックします。

クエリ実行画面は下のようになっています。

既にCRUD操作はできるようになっています。すごい!!

早速先程のモデルを作成してみます。

archive_timeはオプショナルなので、なくても作成できました。

ちなみに、DynamoDBのID型はUUIDが自動で挿入されるようになっているようです。

2つモデルを作成したので、今度は取得を行ってみます。

こちらもうまく取得できました。

まとめ

このように、簡単にGraphQLを使用したAPIが実装できてしまいました。

GraphQLの使い方がよくわからなかったので、そっちも調べてやりたかったのですが、時間が足りませんでした。。

また今度、じっくりやろうと思います!!