![[Twilio+Node.js+AWS Lambda] Twilio Video でビデオ通話サーバーを構築する](https://images.ctfassets.net/ct0aopd36mqt/wp-thumbnail-3f316c20ff5f4f46d1a005e2ad976882/c71162912c717bb0ca7c9b4196a40df5/twilio.png)
[Twilio+Node.js+AWS Lambda] Twilio Video でビデオ通話サーバーを構築する
本記事は、以下のような読者を対象としています。
- Twilio Video を活用したビデオ通話アプリを開発したいエンジニア
- AWS Lambda を活用したサーバーレスアーキテクチャに興味がある開発者
- Node.js を用いたバックエンド開発の経験がある方
- WebRTC やリアルタイム通信技術に関心がある方
また本記事では、以下を前提としています。
- JavaScript の基本的な文法が分かる
- REST API の基本的な概念を理解している
- AWS Lambda や API Gateway の概要を理解している
- Twilio の基本的な使い方を知っている
参考記事
- https://www.twilio.com/docs/video/overview
- https://www.twilio.com/docs/video/tutorials/get-started-with-twilio-video-node-express-server
検証環境
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 アカウント(Twilio の公式サイト から作成可能)
- AWS アカウント(AWS の公式サイト から作成可能)
Twilio API キーの取得
Twilio Video の API を利用するために、Twilio の API キーを取得します。
- Twilio コンソール にログイン
- API Keys & Tokens のページに移動
- Create API Key をクリックし、新しい API キーを作成
- SID と Secret をメモしておく(後で使用)
必要な 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 のアカウント SIDTWILIO_API_KEY_SID
: Twilio API のキー SIDTWILIO_API_KEY_SECRET
: Twilio API のキーシークレット
ZIP ファイルをアップロードし、関数を保存します。
API Gateway の設定
Lambda 関数を HTTP エンドポイントとして公開するために、API Gateway を設定します。
API Gateway の作成
- AWS コンソールで API Gateway に移動
- 新しい API を作成(HTTP API を選択)
- エンドポイントを作成(Lambda 関数をターゲットに設定)
- 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 のルームに接続するためのトークンを取得できます。
次回は、クライアント側の実装について解説します。