[Twilio+Node.js+AWS Lambda] Twilio Video でビデオ通話サーバーを構築する

[Twilio+Node.js+AWS Lambda] Twilio Video でビデオ通話サーバーを構築する

Twilio Video を活用したビデオ通話アプリケーションのサーバーを AWS Lambda 上に構築する方法について解説します。Node.js を使用し、Twilio API を活用してビデオ通話サーバーを構築します。

本記事は、以下のような読者を対象としています。

  • Twilio Video を活用したビデオ通話アプリを開発したいエンジニア
  • AWS Lambda を活用したサーバーレスアーキテクチャに興味がある開発者
  • Node.js を用いたバックエンド開発の経験がある方
  • WebRTC やリアルタイム通信技術に関心がある方

また本記事では、以下を前提としています。

  • JavaScript の基本的な文法が分かる
  • REST API の基本的な概念を理解している
  • AWS Lambda や API Gateway の概要を理解している
  • Twilio の基本的な使い方を知っている

参考記事

検証環境
node: 22.13.1
npm: 10.9.2
node_modules/twilio: 5.5.1

Twilio Video とは

Twilio Video は、アプリケーションに高品質なビデオ通話機能を追加するためのサービスです。

  • リアルタイム通信: WebRTC を活用した低遅延のビデオ・音声通信を提供
  • 柔軟な構成: 一対一の通話から多人数参加のビデオ会議まで対応
  • クロスプラットフォーム: iOS, Android, Web 向けの SDK を提供

このプラットフォームは、遠隔医療、オンライン教育、カスタマーサポート、リモートワークなど様々なユースケースに対応しています。Twilio のインフラストラクチャを利用することで、開発者は複雑なビデオ技術を自前で構築することなく、アプリケーションにビデオ機能を統合できます。

本記事では、Twilio Video を活用したビデオ通話アプリケーションのサーバーを AWS Lambda 上に構築する方法 について解説します。Node.js を使用し、Twilio API を活用してビデオ通話サーバーを構築します。

事前準備

AWS Lambda 上に Twilio Video のサーバーを構築するために、以下の準備を行います。

必要なアカウントの作成

本記事の手順を進めるには、以下のアカウントが必要です。

Twilio API キーの取得

Twilio Video の API を利用するために、Twilio の API キーを取得します。

  1. Twilio コンソール にログイン
  2. API Keys & Tokens のページに移動
  3. Create API Key をクリックし、新しい API キーを作成
  4. SIDSecret をメモしておく(後で使用)

必要な AWS サービス

AWS Lambda で Twilio Video のサーバーを動作させるために、以下の AWS サービスを利用します。

  • AWS Lambda(サーバーレス環境で Node.js コードを実行)
  • Amazon API Gateway(Lambda 関数を HTTP エンドポイントとして公開)

AWS Lambda 関数の作成

必要なライブラリのインストール

Twilio の API を利用するために、twilio ライブラリをインストールします。
AWS Lambda では、外部ライブラリを含めた ZIP ファイルをアップロードする必要があります。

ローカル環境で以下のコマンドを実行し、必要なライブラリをインストールします。
なお今回のプロジェクトディレクトリ名を twilio_video としていますが、適宜読み替えてください。

mkdir twilio_video && cd twilio_video
npm init -y
npm install twilio

このコマンドにより、twilio ライブラリが twilio_video ディレクトリ内にインストールされます。

Lambda 関数の作成

次に、AWS Lambda で実行する Node.js スクリプトを作成します。
このスクリプトでは、Twilio Video の Access Token を発行し、クライアントがビデオ通話に参加できるようにします。

index.js

const twilio = require("twilio");

// 環境変数から Twilio の認証情報を取得
const TWILIO_ACCOUNT_SID = process.env.TWILIO_ACCOUNT_SID;
const TWILIO_API_KEY = process.env.TWILIO_API_KEY_SID;
const TWILIO_API_SECRET = process.env.TWILIO_API_KEY_SECRET;

exports.handler = async (event) => {
    try {
        const body = JSON.parse(event.body);
        const roomName = body.room_name || "default_room";

        // Access Token の作成
        const AccessToken = twilio.jwt.AccessToken;
        const VideoGrant = AccessToken.VideoGrant;

        const token = new AccessToken(TWILIO_ACCOUNT_SID, TWILIO_API_KEY, TWILIO_API_SECRET, {
            identity: `user-${Math.random().toString(36).substring(7)}`,
        });

        token.addGrant(new VideoGrant({ room: roomName }));

        return {
            statusCode: 200,
            body: JSON.stringify({ token: token.toJwt() }),
            headers: {
                "Content-Type": "application/json",
            },
        };
    } catch (error) {
        return {
            statusCode: 500,
            body: JSON.stringify({ error: error.message }),
            headers: {
                "Content-Type": "application/json",
            },
        };
    }
};

この関数の動作

  • クライアントからのリクエストを受け取り、指定されたルーム名の Twilio Video ルームを取得または作成
  • ルームに参加するための Access Token を生成
  • 発行したトークンを JSON 形式でレスポンスとして返す

Lambda 関数のデプロイ

作成したスクリプトと twilio ライブラリを ZIP 圧縮し、AWS Lambda にアップロードします。

zip -r function.zip .

次に、AWS Lambda のコンソールで新しい関数を作成し、以下の設定を行います。

  • 関数名: join-room
  • ランタイム: Node.js 22.x
  • 環境変数:
    • TWILIO_ACCOUNT_SID: Twilio のアカウント SID
    • TWILIO_API_KEY_SID: Twilio API のキー SID
    • TWILIO_API_KEY_SECRET: Twilio API のキーシークレット

3

2

ZIP ファイルをアップロードし、関数を保存します。

API Gateway の設定

Lambda 関数を HTTP エンドポイントとして公開するために、API Gateway を設定します。

API Gateway の作成

  1. AWS コンソールで API Gateway に移動
  2. 新しい API を作成(HTTP API を選択)
  3. エンドポイントを作成(Lambda 関数をターゲットに設定)
  4. CORS を有効化(フロントエンドからのリクエストを許可)

デプロイ

API Gateway をデプロイし、発行されたエンドポイント URL をメモしておきます。
この URL をクライアント側で使用し、Twilio Video のトークンを取得できます。

動作確認

API Gateway のエンドポイントを使用して、Lambda 関数が正しく動作するか確認します。

cURL を使用したテスト

以下のコマンドを実行し、トークンが取得できるか確認します。 URL には、先の手順で控えたエンドポイント URL を使用します。

curl -X POST "https://****.amazonaws.com/default/join-room" \
     -H "Content-Type: application/json" \
     -d '{"room_name": "test_room"}'

成功すると、以下のようなレスポンスが返ってきます。

{
    "token": "****"
}

このトークンをクライアント側で使用することで、Twilio Video のルームに接続できます。

まとめ

本記事では、AWS Lambda 上に Twilio Video のサーバーを構築する手順を解説しました。

  • Twilio API キーの取得
  • AWS Lambda 関数の作成とデプロイ
  • API Gateway を使用したエンドポイントの公開
  • cURL を使用した動作確認

このサーバーを活用することで、クライアント側から Twilio Video のルームに接続するためのトークンを取得できます。
次回は、クライアント側の実装について解説します。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.