この記事の目次
Websocketとは?
Websocketとは、ネットワーク規格の1つで双方向通信を実現するためのものです。
双方向通信を実現するために昔はロングポーリングを使用していましたが、この方法では通信パフォーマンスが低下してしまうため、今ではWebsocketを使用することが一般的です。
AWSにも、Websocketを利用するためのサービスとしてWebsocket APIというものが提供されています。
ここでは、AWSが提供しているWebsocket APIについて解説していきます。
AWSのWebsocket
AWSが提供しているAPI Gatewayというサービスに、WebSocket APIが含まれています。
WebSocket APIを使用することで、複雑なポーリングロジックの実装をせずにクライアントとサーバの相互通信が可能になります。
クライアントとサーバの相互通信が可能になることで、チャット機能やアラート通知、ほかにもリアルタイム監視のダッシュボードなど、AWSのアプリケーションとして多くのものを利用者に提供できるようになります。
Websocket APIについて
Websocket APIは、設定したルートに基づいてバックエンドにメッセージを転送します。
AWSのサービスとして作成されたWebsocket APIは、クライアントから受信したメッセージに基づいてバックエンドを呼び出し、バックエンドからは接続されたクライアントにコールバックメッセージを送信します。
メッセージの転送に使用するルートは、あらかじめ定義されている3つのルート($connect、$disconnect、$default)のほかに、カスタムルートを作成して設定することもできます。
あらかじめ定義されている3つのルートの詳細は以下の通りです。
ルート | 説明 |
---|---|
$connect | クライアントとWebsocket APIの接続が確立されているときに選択されます。 |
$disconnect | クライアントまたはサーバからWebsocket APIへの接続が切断されたときに選択されます。 |
$default | 定義されたルートに一致しないリクエストを受信した場合に選択されます。 |
Websocket APIの使い方
Websocket APIは、API Gatewayコンソールから作成できます。
以下の手順でWebsocket APIを作成することができます。
①API Gatewayコンソールにサインインします。
②「APIの作成」を選択します。
③「Websocket API」から「ビルド」を選択します。
④「API名」に作成するWebsocket APIの名前を入力します。
⑤「ルート選択式」にWebsocket APIで使用するルートを入力します。
⑥「説明」にWebsocket APIの詳細説明を入力します。(任意)
⑦「APIの作成」を選択します。
ルート
ルートは、クライアントが受信したJSONメッセージをバックエンドに転送するときに使用されます。
AWSのサービスが、クライアントのリクエストを受信すると、ルート選択式を評価してルートキーが完全に一致するルートを選択します。ルートキーが一致するルートがない場合は$defaultルートを使用します。
$defaultルートがない場合はエラーとなります。
ルートはAPI Gatewayコンソールから以下の手順で作成することができます。
①API Gatewayコンソールにサインインします。
②「API」>「ルート」と選択します。
③「新しいルートキー」にルートキー名を入力します。
④アイコンをクリックして確定します。
統合リクエスト
統合リクエストを設定することで、リクエストを受信したときにバックエンドのどのサービスを呼び出すか、などの動作を設定できます。
ここでは、AWSのサービスを呼び出すように統合リクエストを設定する方法を説明します。
統合リクエストの設定は、API Gatewayコンソールから以下の手順で行えます。
①API Gatewayコンソールにサインインします。
②「API」>「ルート」と選択します。
③「ルート」から統合リクエストを設定するルートを選択します。
④「ルートの概要」で「統合リクエスト」を選択します。
⑤「統合タイプ」から「AWSのサービス」を選択します。
⑥「AWSリージョン」から、アクションの呼び出しに使用するAWSリージョンを選択します。
⑦「AWSのサービス」から、呼び出すAWSのサービスを選択します。
⑧「AWSサブドメイン」は、空欄にします。
⑨「HTTP メソッド」から、アクションに対応する HTTPメソッドタイプを選択します。
⑩「アクション」に使用するアクションを入力します。
⑪「実行ロール」に、アクションの呼び出しに使用するIAMロールを入力します。
⑫「保存」を選択します。
統合レスポンス
統合レスポンスを設定することで、バックエンドサービスからクライアントに返すレスポンスを設定することができます。
統合レスポンスの設定は、API Gatewayコンソールから以下の手順で行えます。
①API Gatewayコンソールにサインインします。
②「API」>「ルート」と選択します。
③「ルート」から統合レスポンスを設定するルートを選択します。
④「レスポンス選択式」に値を入力します。
⑤「レスポンスキー」から「レスポンスの追加」を選択します。
⑥「新しいレスポンスキー」にレスポンスキー名を入力します。
⑦アイコンをクリックして確定します。
Websocket APIのデプロイ
作成したWebsocket APIは、デプロイすることで利用者が呼び出せるようになります。
デプロイするためには、Websocket APIデプロイを作成して、ステージに関連付けます。
ステージは、”dev”、”test”、”prod”などといった環境を表します。
Websocket APIのデプロイは、API Gatewayコンソールから以下の手順で行います。
①API Gatewayコンソールにサインインします。
②デプロイしたいWebsocket APIを選択します。
③「アクション」メニューから「APIのデプロイ」を選択します。
④ステージをリストから選択するか、新しいステージ名を入力します。
⑤「作成」を選択します。
Websocket APIの監視
CloudWatchを使用することで、Websocket APIを監視することができます。
CloudWatchメトリクスを利用すれば、クライアントとサーバとの間で送受信されるメッセージ数を監視したり、リクエストからレスポンスまでの時間を計測したりすることができます。
また、CloudWatchログを利用すれば、送受信のステータスコードやエラーメッセージなどの実行ログのほかに、リクエストの発信元の情報(ユーザID、IPアドレスなど)などのアクセスログを出力することができます。
ログフォーマットもJSON、XML、CSVなど細かく設定することができます。
Websocket APIの理解を深めてAWSで双方向通信を実現しよう!
Websocket APIを使用することで、昔よりも簡単に双方向通信のサービスを実現することができます。
API Gatewayコンソールを使うことで、AWSサービスとの連携やデプロイもGUIベースで簡単に設定することができます。
双方向通信はパフォーマンスの監視や管理が大変だったり、想定外のアクセス数によってレスポンスの低下が発生するなど、管理者の負担が大きいものでした。
しかし、Websocket APIを使うことで、双方向通信可能なAWSサービスを簡単に開発して公開し、運用(監視)することができるようになったので、ぜひともWebsocket APIを使いこなせるようになりましょう。