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 万分
- キャッシュ
- データ処理速度を更に加速させる
- 次の表の通り
![](/img/Screenshot_from_2023-07-27_08-36-33.png)
料金例は一ヶ月21.29USDとなっており、結構お手頃価格です。
![](/img/Screenshot_from_2023-07-27_08-43-08.png)
APIを選択する
では早速使ってみます。
AppSyncのトップページから「APIを作成」をクリックします。
![](/img/Screenshot_from_2023-07-27_08-47-08.png)
まず最初に、「GraphQL APIs」か「Merged APIs」から選択をすることになります。
![](/img/AWS-AppSync-Console.png)
「Merged APIs」を選択した場合は以下のようになります。
![](/img/AWS-AppSync-Console%20%281%29.png)
GraphQL APIsはわかりますが、MergedAPIってなんだろう…?
MergedAPIとは
AWS AppSyncマージされたAPI機能では、AWS AppSyncさまざまなデータドメインのチームが独立してAPI(GraphQLスキーマ、リゾルバー、データソース、関数など)を作成してデプロイし、それらを1つのマージされたAPIにまとめることができます。
複数のAppSyncをまとめるための機能、ということですね。
![](https://docs.aws.amazon.com/ja_jp/appsync/latest/devguide/images/merged-api-workflow.png)
GraphQL APIsの作成
ではまた戻って、GraphQL APIsを作成します。
DynamoDBのテーブルも含めて1から作りたいので、「Design from scratch」を選択します。
![](/img/AWS-AppSync-Console%20%28%e3%82%b3%e3%83%94%e3%83%bc%29.png)
次の画面で、API名を入力します。
![](/img/Screenshot_from_2023-07-28_09-14-45.png)
VPCでプライベートに使用するための設定もあるみたいですね。
AWS AppSync プライベート API の使用 - AWS AppSync
続いて、リソースを今作るか後で作成するか選択します。
![](/img/Screenshot_from_2023-07-28_09-14-54.png)
DynamoDBをこの時点で一緒に作ってしまうことにしました。
![](/img/AWS-AppSync-Console%20%283%29.png)
作ったモデルはidや名前、作成時間などの情報を含んだものです。
オプショナルなフィールドとしてarchive_timeも作成しました。
次へを押すと確認画面になります。
![](/img/AWS-AppSync-Console%20%281%29%20%281%29.png)
確認ができたらAPIを作成します。
作成完了までは少しかかります。
![](/img/AWS-AppSync-Console%20%282%29.png)
作成できたら、早速試してみましょう。
クエリを実行をクリックします。
![](/img/AWS-AppSync-Console%20%281%29%20%282%29.png)
クエリ実行画面は下のようになっています。
既にCRUD操作はできるようになっています。すごい!!
![](/img/Screenshot_from_2023-07-28_09-25-01.png)
早速先程のモデルを作成してみます。
archive_timeはオプショナルなので、なくても作成できました。
ちなみに、DynamoDBのID型はUUIDが自動で挿入されるようになっているようです。
![](/img/Screenshot_from_2023-07-28_09-29-04.png)
2つモデルを作成したので、今度は取得を行ってみます。
こちらもうまく取得できました。
![](/img/Screenshot_from_2023-07-28_09-29-25.png)
まとめ
このように、簡単にGraphQLを使用したAPIが実装できてしまいました。
GraphQLの使い方がよくわからなかったので、そっちも調べてやりたかったのですが、時間が足りませんでした。。
また今度、じっくりやろうと思います!!