接続されたユーザーとクライアントアプリを管理する: $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 コマンドの使用」を参照してください。