API Gatewayのウェブソケットの制約事項まとめ&Javascriptによる接続実装を解説😎

API Gatewayのウェブソケットの制約事項まとめ&Javascriptによる接続実装を解説😎

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!

AWSのAPI Gatewayを使用してウェブソケットを実装する場合、いくつかの制約事項があります。この記事では、API Gatewayのウェブソケットの制約事項をまとめます。

はじめに

AWSのAPI Gatewayを使用すると、ウェブソケットを使用したリアルタイムな通信を実装することができます。

ウェブソケットの制約事項

API Gatewayのウェブソケットの制約事項は以下の通りです。

リソースまたはオペレーションデフォルトのクォータ引き上げ可能
1 秒あたり、1 アカウント (すべての WebSocket API 間) あたり、1 リージョンあたりの新しい接続数500はい
同時接続対象外該当しません
AWS LambdaAPI ごとの オーソライザー10はい
AWS Lambda オーソライザー結果サイズ8 KBいいえ
API あたりのルート数300はい
API あたりの統合の数300はい
API あたりのステージ数10はい
WebSocket のフレームサイズ32 KBいいえ
メッセージのペイロードサイズ128 KB **いいえ
WebSocket API の接続時間2 時間いいえ
アイドル接続のタイムアウト10 分いいえ

API Gateway は、同時接続にクォータを適用しません。

同時接続の最大数は、1 秒あたりの新規接続数と 2 時間の最大接続時間によって決まります。たとえば、デフォルトのクォータが 500 新規接続/秒の場合、クライアントが 2 時間を超える最大速度で接続する場合、API Gateway は最大 3,600,000 の同時接続を提供することができます。

WebSocket フレームサイズには 32 KB のクォータがあるため、32 KB を超えるメッセージはそれぞれが 32 KB 以下の複数のフレームに分割する必要があります。それより大きなメッセージ (または大きなフレームサイズ) が受信された場合、接続は 1009 コードで閉じられます。

ウェブソケットへ接続するサンプルプログラム

APIGatewayのWebSocketsを使用してリアルタイムのチャットアプリケーションを実装する方法を示しています。実際にJSを実行して動作確認してみてください。

// Connect to the WebSocket endpoint
const socket = new WebSocket('wss://{API_ID}.execute-api.{REGION}.amazonaws.com/{STAGE_NAME}');

// Listen for messages from the server
socket.addEventListener('message', (event) => {
  // Parse the message
  const message = JSON.parse(event.data);
  
  // Display the message in the chat window
  const chatWindow = document.getElementById('chat-window');
  const newMessage = document.createElement('p');
  newMessage.textContent = `${message.username}: ${message.text}`;
  chatWindow.appendChild(newMessage);
});

// Send a message to the server
const sendMessage = (username, text) => {
  // Create the message object
  const message = {
    username,
    text
  };

  // Send the message to the server
  socket.send(JSON.stringify(message));
};

// Listen for the 'send' button to be clicked
const sendButton = document.getElementById('send-button');
sendButton.addEventListener('click', () => {
  // Get the username and message text from the form
  const username = document.getElementById('username').value;
  const text = document.getElementById('message-text').value;
  
  // Send the message to the server
  sendMessage(username, text);
});

このコードは、API Gateway WebSocketsを使用してリアルタイムのチャットアプリケーションを実装する方法です。

socket.addEventListener('message', ...)を使用して、サーバーからのメッセージを受信し、 sendMessage関数を使用して、サーバーにメッセージを送信することができます。

まとめ

本記事では、API Gatewayのウェブソケットの制約事項と、実装方法をまとめました。

API Gatewayのウェブソケットを使用してリアルタイムな通信を実装する場合、事前に制約事項を把握しておく必要があります。サンプルプログラムも紹介しましたので、参考にしてください。

サーバーレス開発低コストなAWS開発内製化はお気軽にお問い合わせください。