サンプル集  >  Node.js  >  API Gateway+WebSocket
API Gateway+WebSocket
2025/12/12

API GatewayのWebSocketを使ってみます。

  1. Lambdaの作成
  2. API Gatewayの作成
  3. 接続確認
  4. Resource stageに@connectionsを追加
  5. ルートを追加
  6. Lambdaプロキシ統合をON

Lambdaの作成

AWSマネジメントコンソールでLambdaを開き関数の作成をクリックします。


以下の情報を入力し関数を作成をクリックします。

関数名helloWebSocket
ランタイムNode.js 24.x
アーキテクチャx86_64

Dismissをクリックします。


Lambda関数が正常に作成されました。 200を返すコードが生成されていました。 console.logで開始のメッセージを表示するようにします。

index.mjs
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
export const handler = async (event) => {
  // TODO implement
  console.log("START handler");
  const response = {
    statusCode: 200,
    body: JSON.stringify('Hello from Lambda!'),
  };
  return response;
};

API Gatewayの作成

+トリガーを追加をクリックします。


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


API Gatewayを選択し以下の情報を入力し追加をクリックします。

インテント新規のAPIを作成
APIタイプWebSocket API


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


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


接続確認

クライアント側は以下のjsを実行して接続してみます。

const ws = new WebSocket("wss://...amazonaws.com/default");

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 stagedefault
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回アクセスしているからだと思います。


とりあえずエラーは出なくなったのでよかったです。

▲ PageTop  ■ Home


Copyright (C) 2025 ymlib.com