Amazon API GatewayのWebsocketを試す

Amazon API GatewayのWebsocketを試す:


はじめに

2018/12/19にAPI gatewayがwebsocketに対応したのでためしみてみます。

https://aws.amazon.com/jp/blogs/news/announcing-websocket-apis-in-amazon-api-gateway/

以下のサンプルになります。
https://github.com/aws-samples/simple-websockets-chat-app


作成する構成



image.png


クライアントから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の構築

Create APIをクリックする。


image.png


WebSocketを選択する。

API Name: WebSocketと入力する。

Route Selection Expression:$request.body.action

Create APIをクリックする。


image.png


sendmessageルートを作成する。sendmessageと入力に右横のチェックマークをクリックする。


image.png


connectルートにonConnect関数を登録する。

Integration Requestをクリック。



image.png


Lambda FunctionにStack名-OnConnect-Functionxxxxを指定します。


image.png


上記を、disconnect/sendmessage/default分繰り返します。

defaultは、選択式がAPIルート内の他のrouteKeyに一致しない値を生成する場合に使用されます。今回は特にエラーハンドリング用の関数がないので、仮にonConnectを指定します。

何かしら紐づけておかないとAPIをデプロイするときにエラーになります。
image.png

APIをデプロイする。


image.png


APIデプロイ完了。


image.png



確認

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 
>  


お約束

投稿内容は私個人の意見であり、所属企業・部門見解を代表するものではありません。

コメント

このブログの人気の投稿

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2020-12-01 09:41:49 RSSフィード2020-12-01 09:00 分まとめ(69件)