Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

この記事は全部俺 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を用いた双方向通信をサーバレスで実現することができるのはすごく良いですね!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした