はじめに
2018/12/19にAPI gatewayがwebsocketに対応したのでためしみてみます。
以下のサンプルになります。
https://github.com/aws-samples/simple-websockets-chat-app
作成する構成
クライアントからWebsocketで接続に行くと、onConnect関数が実行され、コネクションIDがDynamoDBに登録されます。
メッセージを添えてsendMessageアクションを実行すると、sendMessage関数がDynamoDBに保存されたコネクションIDに対して、メッセージを送信する。
手順
赤枠の構成をCloudFormationで作成
SAMで作成したcFnテンプレートがS3のバケットを準備しておきます。
git cloneしてSAM/cFn実行します。
git clone https://github.com/aws-samples/simple-websockets-chat-app.git
cd simple-websockets-chat-app
sam package --template-file template.yaml --output-template-file output.yaml --s3-bucket <S3バケット>
aws cloudformation deploy --template-file output.yaml --capabilities CAPABILITY_IAM --stack-name websocket-test
青枠のAPI Gatewayの構築
WebSocketを選択する。
API Name: WebSocketと入力する。
Route Selection Expression:$request.body.action
Create APIをクリックする。
sendmessageルートを作成する。sendmessageと入力に右横のチェックマークをクリックする。
connectルートにonConnect関数を登録する。
Integration Requestをクリック。
Lambda FunctionにStack名-OnConnect-Functionxxxxを指定します。
上記を、disconnect/sendmessage/default分繰り返します。
defaultは、選択式がAPIルート内の他のrouteKeyに一致しない値を生成する場合に使用されます。今回は特にエラーハンドリング用の関数がないので、仮にonConnectを指定します。
何かしら紐づけておかないとAPIをデプロイするときにエラーになります。
確認
NPMをインストールしてwscatをインストールする。
npm install -g wscat
メッセージ送信用と受信用のターミナルを開いてWebsocketで接続する
wscat -c wss://<API ID>.execute-api.<Region>.amazonaws.com/dev
connected (press CTRL+C to quit)
>
>
以下のJSONを入力する
{"action":"sendmessage", "data":"hello world"}
受信用のターミナルでメッセージが表示されることを確認する。
connected (press CTRL+C to quit)
< hello world
>
お約束
投稿内容は私個人の意見であり、所属企業・部門見解を代表するものではありません。