Serverless WebSocket
AWS コンソール
Serverless Framework
SAM
CDK
Terraform
Lambda
WebSocket の接続は API Gateway で管理してバックエンドは Lambda に実装します。
AWS SDK
Node.js 18 ランタイムには v3 がプリインストールされている。
それ未満のランタイムには v2 がプリインストールされている。
CORS
WebSocket には関係なさそう。
API Gateway
テスト
認証
ブラウザでは WebSocket にカスタムヘッダーを追加できないのでクエリパラメーター等で送信する。
wss://
なら問題ないはずだがログに記録される可能性は残る。(ws://
はダメ)
もしくは接続後に認証メッセージを送信する。(こちらの方が安全)
CloudFront
CORS
WAF
クライアント
Cloudflare
Official
Unofficial
Close Code
Code | 理由 |
---|---|
1001 | クライアントでのブラウザ更新やタブ移動による切断 |
1005 | クライアントから close() で切断 |
1006 | デプロイ時などサーバーから切断 |
遭遇したエラー
A WebSocket 'attachment' cannot be larger than 2048 bytes.'attachment' was 2061 bytes.
ws.serializeAttachment()
の The serialized size of value is limited to 2,048 bytes
に引っかかっていそう。
Durable Object's isolate exceeded its memory limit due to overflowing the storage cache. This could be due to writing too many values to storage without stopping to wait for writes to complete, or due to reading too many values in a single operation (e.g. a large list()). All objects in the isolate were reset.
WebSocket の close 時に不要になった Storage のデータを削除しておらずゴミが増えていたので不要なデータを削除。
The Durable Object's code has been updated, this version can no longer access storage.
デプロイのタイミングで動いていたコード?
Too many API requests by single worker invocation.
Within a single invocation, a Worker can make up to 1,000 operations to external services
に引っかかっていそう。
KV のデータが最大 500 個分必要なので get
をその分呼んでいる。どうやら Workers が起動している間(constructor が呼ばれて終了するまで?)の複数のリクエストの累計のようなので超えてしまう。
REST API を使うことで bulk にできる。
D1
マイグレーション
Deno Deploy