| Linuxコマンド |
| 用語集 |
| debian メモ |
| apache2 メモ |
| MySQL メモ |
| Oracle メモ |
| PostgreSQL |
| HOME |
API GatewayのWebSocketを使ってみます。
Lambdaの作成
AWSマネジメントコンソールでLambdaを開き関数の作成をクリックします。

以下の情報を入力し関数を作成をクリックします。
| 関数名 | helloWebSocket |
|---|---|
| ランタイム | Node.js 24.x |
| アーキテクチャ | x86_64 |
Dismissをクリックします。

Lambda関数が正常に作成されました。 200を返すコードが生成されていました。 console.logで開始のメッセージを表示するようにします。
| index.mjs | ||
|
API Gatewayの作成
+トリガーを追加をクリックします。

トリガーを追加のページが開きました。

API Gatewayを選択し以下の情報を入力し追加をクリックします。
| インテント | 新規のAPIを作成 |
|---|---|
| APIタイプ | WebSocket API |

トリガーが追加されました。

APIエンドポイントを確認します。

接続確認
クライアント側は以下のjsを実行して接続してみます。
ws.onopen = () => {
console.log("Connected!");
ws.send(JSON.stringify({ action: "hello" }));
};
ws.onmessage = (msg) => {
console.log("Received:", msg.data);
};
Chromeで適当なWebページを開きF12でDeveloper Toolsを開きます。

jsを貼り付けようとしたところエラーが出ました。

allow pastingと入力しEnterを押します。

貼り付けてEnterを押したところエラーが出ました。

API Gatewayに表示されているhelloWebSocket-APIをクリックします。

API名をクリックします。

APIをデプロイをクリックします。

ステージでdefaultを選択します。

デプロイをクリックします。

デプロイされました。

再度コマンドを実行したところws.onopenは成功したようでConnected!と表示されましたが、ReceivedはForbiddenになりました。

Lambdaの設定のアクセス権限をクリックし実行ロールのロール名に表示されているhelloWebSocket-role-cnvl3oguをクリックします。

ロールのページが開きました。

許可を追加でインラインポリシーを作成をクリックします。

以下の情報を選択し下にスクロールさせます。
| サービス | ExecuteAPI |
|---|---|
| アクション許可 | ManageConnections |
ARMを追加をクリックします。

ARMを追加をクリックします。

以下の情報を設定しARMを追加をクリックします。
| リソースのリージョン | ap-northeast-1 |
|---|---|
| Resource api | * |
| Resource stage | default |
| Resource method | * |
| Resource api specific resource path | * |
| リソースARN | (自動入力) |

次へをクリックします。


ポリシーが作成されました。

再度実行してみましたが状況は変わりませんでした。
Resource stageに@connectionsを追加
Resource stageに@connectionsを追加してみます。

状況は変わりませんでした。
ルートを追加
ルートを作成をクリックします。

以下の情報を入力します。
| ルートキー | $connect |
|---|

下にスクロールさせてLambda関数を紐づけルートを作成をクリックします。

同じ要領で$disconnectと$defaultも作成します。

APIをデプロイをクリックします。

再度実行したところConnected!も表示されませんでした。


Lambdaプロキシ統合をON
Lambdaプロキシ統合をONにして変更を保存をクリックします。

再度実行したところエラーは出なくなりました!

CloudWatchにもログが出力されていました。 ログは2セット出力されているようです。 これはws.onopen()とws.onmessage()の2回アクセスしているからだと思います。

とりあえずエラーは出なくなったのでよかったです。
Copyright (C) 2025 ymlib.com
