WebSocket サブプロトコルを必要とする $connect ルートの設定 - Amazon API Gateway

WebSocket サブプロトコルを必要とする $connect ルートの設定

クライアントは、WebSocket API への接続中に、Sec-WebSocket-Protocol フィールドを使用して WebSocket サブプロトコルをリクエストできます。API がサポートするサブプロトコルをクライアントがリクエストした場合にのみ接続を許可するように、$connect ルートの統合を設定できます。

次の Lambda 関数の例は、Sec-WebSocket-Protocol ヘッダーをクライアントに返します。この関数は、クライアントが myprotocol サブプロトコルを指定した場合のみ API への接続を確立します。

このサンプル API と Lambda プロキシ統合を作成する AWS CloudFormation テンプレートについては、ws-subprotocol.yaml を参照してください。

export const handler = async (event) => { if (event.headers != undefined) { const headers = toLowerCaseProperties(event.headers); if (headers['sec-websocket-protocol'] != undefined) { const subprotocolHeader = headers['sec-websocket-protocol']; const subprotocols = subprotocolHeader.split(','); if (subprotocols.indexOf('myprotocol') >= 0) { const response = { statusCode: 200, headers: { "Sec-WebSocket-Protocol" : "myprotocol" } }; return response; } } } const response = { statusCode: 400 }; return response; }; function toLowerCaseProperties(obj) { var wrapper = {}; for (var key in obj) { wrapper[key.toLowerCase()] = obj[key]; } return wrapper; }

wscat を使用して、API がサポートするサブプロトコルをクライアントがリクエストした場合にのみ API が接続を許可することをテストできます。次のコマンドは、-s フラグを使用して、接続中にサブプロトコルを指定します。

次のコマンドは、サポートされていないサブプロトコルとの接続を試行します。クライアントが chat1 サブプロトコルを指定したため、Lambda 統合は 400 エラーを返し、接続は失敗します。

wscat -c wss://api-id.execute-api.region.amazonaws.com/beta -s chat1 error: Unexpected server response: 400

次のコマンドは、サポートされているサブプロトコルを接続リクエストに含めます。Lambda 統合により、接続が可能になります。

wscat -c wss://api-id.execute-api.region.amazonaws.com/beta -s chat1,myprotocol connected (press CTRL+C to quit)

WebSocket API の呼び出しの詳細については、「WebSocket API の呼び出し」を参照してください。