LoginSignup
16
13

More than 5 years have passed since last update.

AWS Lambda + AWS API Gateway + websocketでお手軽双方向通信チャットアプリをサーバレスで簡単構築してみた

Last updated at Posted at 2018-12-19

この記事は全部俺 Advent Calendar 2018の19日目の記事です。

この記事について

Amazon API GatewayでWebsocketが利用可能になりました。
これによって、Websocketを使用した双方向通信がサーバレスで実現できます!
Websocketでつながっているユーザであれば、バックエンド側からのpush通知も可能になります!
早速試してみたので記事にしてみます。

ちなみに動作しているところはこんな感じです。


バックエンド側から特定のユーザのみにメッセージを送っているところはこんな感じです。
コンソール1ではメッセージを受け取っていますが、コンソール2では受け取っていないことがわかります。
only_push.gif

環境構築

基本的にこのページに従って環境構築をしていきます。

  • simple-websockets-chat-appAWS Serverless Application Repositoryから、Deployを選択
  • Amazon API Gatewayから、Choose the protocolで、WebSocketを選択してAPIを作成
  • Amazon API GatewayRoutesから、$connect, $disconnect, sendmessage, $defaultにて呼び出すLambdaをそれぞれ設定してステージング
  • wscatを使ってテスト

参考までに、sendmessageAmazon API GatewayRoutes設定は以下のようになります。
image.png

これだけでWebsocketを用いた簡単なチャットアプリがサーバレスで使用できます!

このサンプルだとバックエンド側から特定のユーザのみへのメッセージを送るLambdaが含まれていませんが、sendmessageのfunctionを参考に実装すると上で貼ったGIFのような動作をさせることができます。
postParams.ConnectionIdDynamoDBsimplechat_connectionsテーブルが作成されており、そこにconnectionIDが入力されているので、それを使用すれば特定のユーザのみへチャットを送ることが可能です!

まとめ

今回使用したサンプルではランダムにconnectionIDが作成されていますが、ユーザごとに固有の値を入力したり、ユーザとconnectionIDを紐づけておけば、もっと簡単にユーザごとへのDMを送ることができそうですね。
LambdaAPI Gatewayをいつものように書いて、ちょっと設定を変えるだけで簡単にWebsocketを用いた双方向通信をサーバレスで実現することができるのはすごく良いですね!

16
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
13