SAAの模試で、DynamoDBを使用してリアルタイムデータ処理を行うWebアプリケーションの構築方法という問題で間違えてしまいました。
AppSyncを使うのが正解らしいのですが、AppSyncってなんぞ!?となったので調べました。
AppSyncとは
AWS AppSync は、サーバーレスの GraphQL および Pub/Sub API を作成し、単一のエンドポイントを通じて安全にデータの照会、更新、公開を行うことで、アプリケーションの開発を簡素化します。
な、なんか凄そう。
AWSAppSync開発者は、安全でサーバーレスの高性能なGraphQLおよびPub/Sub APIを使用して、アプリケーションやサービスをデータやイベントに接続できます。以下を実行すると、AWSAppSync次の操作を実行できます。
- 1 つの GraphQL API エンドポイントから 1 つ以上のデータソースのデータにアクセスする。
 - 複数のソースの GraphQL API を 1 つの統合された GraphQL API に結合します。
 - リアルタイムのデータ更新をアプリケーションに公開します。
 - 組み込みのセキュリティ、モニタリング、ロギング、トレースを活用し、オプションのキャッシュにより低レイテンシを実現できます。
 - お支払いいただくのは、API リクエストと配信されたリアルタイムメッセージに対してのみです。
 
つまり、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を作成」をクリックします。
 まず最初に、「GraphQL APIs」か「Merged APIs」から選択をすることになります。
 「Merged APIs」を選択した場合は以下のようになります。
 GraphQL APIsはわかりますが、MergedAPIってなんだろう…?
MergedAPIとは
AWS AppSyncマージされたAPI機能では、AWS AppSyncさまざまなデータドメインのチームが独立してAPI(GraphQLスキーマ、リゾルバー、データソース、関数など)を作成してデプロイし、それらを1つのマージされたAPIにまとめることができます。
複数のAppSyncをまとめるための機能、ということですね。
 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の使い方がよくわからなかったので、そっちも調べてやりたかったのですが、時間が足りませんでした。。
また今度、じっくりやろうと思います!!