接続されたユーザーとクライアントアプリを管理する: $connect
ルートおよび $disconnect
ルート
次のセクションでは、WebSocket API の $connect
ルートおよび $disconnect
ルートを使用する方法について説明します。
$connect
ルート
クライアントアプリは、WebSocket アップグレードリクエストを送信して WebSocket API に接続します。リクエストが成功すると、接続が確立されている間に $connect
ルートが実行されます。
WebSocket 接続はステートフルな接続であるため、$connect
ルートのみで認証を設定できます。AuthN
/AuthZ
は接続時にのみ実行されます。
$connect
ルートに関連付けられている統合の実行が完了するまで、アップグレードリクエストは保留中になり、実際の接続は確立されません。$connect
リクエストが失敗した場合 (AuthN
/AuthZ
の障害や統合の障害など)、接続は行われません。
注記
$connect
で承認が失敗した場合、接続は確立されず、クライアントは 401
または 403
レスポンスを受け取ります。
$connect
の統合の設定はオプションです。次の場合は $connect
統合の設定を検討してください。
-
Sec-WebSocket-Protocol
フィールドを使用して、クライアントがサブプロトコルを指定できるようにする。サンプルコードについては、「WebSocket サブプロトコルを必要とする $connect ルートを設定する」を参照してください。 -
クライアントが接続したときに通知を受ける。
-
接続をスロットリングする、または接続するユーザーを管理する。
-
バックエンドで、コールバック URL を使用してメッセージをクライアントに送信する。
-
各接続 ID およびその他の情報をデータベース (例: Amazon DynamoDB) に保存する。
$connect
ルートからの接続情報の受け渡し
プロキシ統合と非プロキシ統合の両方を使用して、$connect
ルートからデータベースまたは他の AWS のサービス に情報を渡すことができます。
プロキシ統合を使用して接続情報を渡すには
イベントでは、Lambda プロキシ統合から接続情報にアクセスできます。別の AWS のサービス または AWS Lambda 関数を使用して接続に投稿します。
次の Lambda 関数は、requestContext
オブジェクトを使用して接続 ID、ドメイン名、ステージ名、およびクエリ文字列を記録する方法を示しています。
非プロキシ統合を使用して接続情報を渡すには
-
非プロキシ統合により接続情報にアクセスできます。統合リクエストを設定し、WebSocket API リクエストテンプレートを提供します。以下の、Velocity Template Language (VTL)
マッピングテンプレートは、統合リクエストを提供します。このリクエストは、以下の詳細を非プロキシ統合に送信します。 -
接続 ID
-
ドメイン名
-
ステージ名
-
パス
-
ヘッダー
-
クエリ文字列
このリクエストは、接続 ID、ドメイン名、ステージ名、パス、ヘッダー、クエリ文字列を非プロキシ統合に送信します。
{ "connectionId": "$context.connectionId", "domain": "$context.domainName", "stage": "$context.stage", "params": "$input.params()" }
データ変換の設定の詳細については、「API Gateway での WebSocket API のデータ変換」を参照してください。
統合リクエストを完了するには、統合レスポンスに
StatusCode: 200
を設定します。統合レスポンスの詳しい設定方法については、「API Gateway コンソールを使用した統合レスポンスの設定」を参照してください。 -
$disconnect
ルート
$disconnect
ルートは、接続を閉じた後に実行されます。
接続は、サーバーまたはクライアントによって閉じることができます。接続が実行されると、接続がすでに閉じられているため、$disconnect
がベストエフォート型のイベントです。API Gateway は、統合に $disconnect
イベントを配信するために最善を尽くしますが、配信を保証することはできません。
バックエンドは、@connections
API を使用して切断を開始できます。詳細については、「バックエンドサービスでの @connections コマンドの使用」を参照してください。