この記事は全部俺 Advent Calendar 2018の19日目の記事です。
この記事について
Amazon API GatewayでWebsocketが利用可能になりました。
これによって、Websocketを使用した双方向通信がサーバレスで実現できます!
Websocketでつながっているユーザであれば、バックエンド側からのpush通知も可能になります!
早速試してみたので記事にしてみます。
ちなみに動作しているところはこんな感じです。
websocket chat app on AWS Lambda(serverless) pic.twitter.com/AGZ1a2ZIP5
— tez (@te22eret) 2018年12月19日
バックエンド側から特定のユーザのみにメッセージを送っているところはこんな感じです。
コンソール1ではメッセージを受け取っていますが、コンソール2では受け取っていないことがわかります。
環境構築
基本的にこのページに従って環境構築をしていきます。
-
simple-websockets-chat-appの
AWS Serverless Application Repository
から、Deploy
を選択 -
Amazon API Gateway
から、Choose the protocol
で、WebSocket
を選択してAPIを作成 -
Amazon API Gateway
のRoutes
から、$connect
,$disconnect
,sendmessage
,$default
にて呼び出すLambdaをそれぞれ設定してステージング -
wscat
を使ってテスト
参考までに、sendmessage
のAmazon API Gateway
のRoutes
設定は以下のようになります。
これだけでWebsocketを用いた簡単なチャットアプリがサーバレスで使用できます!
このサンプルだとバックエンド側から特定のユーザのみへのメッセージを送るLambdaが含まれていませんが、sendmessage
のfunctionを参考に実装すると上で貼ったGIFのような動作をさせることができます。
postParams.ConnectionId
にDynamoDB
のsimplechat_connections
テーブルが作成されており、そこにconnectionID
が入力されているので、それを使用すれば特定のユーザのみへチャットを送ることが可能です!
まとめ
今回使用したサンプルではランダムにconnectionID
が作成されていますが、ユーザごとに固有の値を入力したり、ユーザとconnectionID
を紐づけておけば、もっと簡単にユーザごとへのDMを送ることができそうですね。
Lambda
とAPI Gateway
をいつものように書いて、ちょっと設定を変えるだけで簡単にWebsocketを用いた双方向通信をサーバレスで実現することができるのはすごく良いですね!