AWS AppSync Eventsをゼロから知るためにシンプルなクライアント実装して動作を確認します。
はじめに
AWS AppSync は以前から提供されておりましたが、個人的にはIoTシステムなどでデータをやり取りする方面の機能という印象でした。
あまり自分の守備範囲で適用されることはないだろうと深く知ることもありませんでした。
AWS AppSync Events の理解
特徴としては大まかに下記のような理解です。
- 双方向のメッセージ通信機能を提供
- メッセージをPublish すると、Subscribeしているクライアントへ配信される
- Publishを受ける/クライアントへ配信するサーバー機能がフルマネージドで提供
- Subscribeクライアント数は1台~数百万台も可能(スケーラブル)
- 認証機能の組み込み(IAM/API Key/Cognito/Lambda Authorizer)
- コストは非常に小さい
なお、下記ブログに要点がコンパクトにまとめられており、非常に参考になります。
概要
そもそも実現したかった機能は下記のような仕組みです。
- サーバー側で数秒おきに情報を取得
- 複数のクライアントでリアルタイムに受け取り、画面に表示する
一方向の情報配信というシンプルな機能です。
できるだけ前提知識なしで動作を確認してみます。
※ 活用例やサンプルを探してみると、双方向のやりとりだったり、構成が複雑なことが多いようでした
※ 何かを試す際、必要な周辺知識が大変多くて大変な昨今と感じています 😑
設定手順
AppSync Eventsデプロイ
AWSコンソール→AWS AppSync サービスページより、「APIを作成」→「Event API」と操作します。

API名を指定し、「作成」します。

すぐに作成されます。
この際、チャンネル名前空間は default が作成されます。
APIキーも自動的に作成され、APIキー認証モードとして使用可能に準備されます。
クライアントページ
1ファイルのHTMLを作成しました。これをローカルファイルとして保存してブラウザで開きます。
動作を理解するため、処理部分はライブラリを一切使用しない純粋なJavaScriptで記述してあります。
※悪意のあるコードはありませんが、ご確認の上開いて下さい。
https://gist.github.com/shinsaka/7c1f4b697120baca2b65e79c5e992dfd
面倒な方は下記でも動作確認可能です。( githubの機能で簡易ホスティングします)
動作確認手順
接続情報を確認
AppSyncサービスページ→設定タブより、リアルタイム DNSエンドポイントと、APIキー識別子をコピーします。

クライアントアプリから接続
上記クライアントページを開き、Realtime Domainフィールドへ上記「リアルタイム DNSエンドポイント」、
API Keyフィールドへ「APIキー識別子」の値をペーストし、接続ボタンをクリックします。
「接続中: /default/」表示となれば接続成功、/default/ チャネルのSubscriptionが開始されています。

メッセージをPublish
AppSyncサービスページ→Pub/Subエディタタブへアクセスします。
ここでパブリッシュ、サブスクライブの動作確認ができるようになっています。(助かります)
チャンネルは初期値のまま default /channel 、
データは任意の値をJSON形式で入力し、「パブリッシュ」→「http」を操作します。
右側にリクエスト、レスポンスの内容が表示されます。

受信メッセージを確認
publishしたデータが受信され、画面に表示されていることが確認できます。

まとめ
試してみると、事前のスキーマ定義や設定が不要で、データの保持もせず、純粋にPublish/Subscribe機能のみをシンプルに、フルマネージドでスケーラブルに提供する、すごいサービスであることがわかりました。
今回は、サーバー側が一方的にデータ配布、複数のクライアントがそれを受信する、という簡単なサンプルですが、これだけでも適用できそうな用途があると感じました。
ご参考になれば幸いです。