AWS Lambda
Docker コンテナと AWS Lambda Web Adapter を用いて、Mastra アプリケーションを AWS Lambda にデプロイします。 この方法により、Mastra サーバーを自動スケーリング対応のコンテナ化された Lambda 関数として実行できます。
このガイドは、Mastra アプリケーションがデフォルトの
npx create-mastra@latest
コマンドで作成されていることを前提としています。
新しい Mastra アプリケーションの作成方法については、
はじめにを参照してください。
前提条件
AWS Lambda にデプロイする前に、次を準備してください:
- AWS CLI がインストール済みで、設定されていること
- Docker がインストール済みで、起動していること
- Lambda、ECR、IAM に対して適切な権限を持つ AWS アカウント
- 適切なメモリーストレージを設定した Mastra アプリケーション
メモリ設定
AWS Lambda は一時的なファイルシステムを採用しており、
ファイルシステムに書き込まれたファイルは短期間で失われる可能性があります。
ファイルシステムを利用する Mastra のストレージプロバイダーの使用は避けてください。
例として、ファイル URL を使う LibSQLStore
などがあります。
Lambda 関数はファイルシステムのストレージに制約があります。Mastra アプリケーションは、インメモリまたは外部ストレージプロバイダーを使用するように構成してください。
オプション 1: メモリ内(最も簡単)
import { LibSQLStore } from "@mastra/libsql";
const storage = new LibSQLStore({
url: ":memory:", // メモリ内のストレージ
});
オプション 2: 外部ストレージプロバイダー
Lambda の起動間でメモリを永続化するには、Turso と組み合わせた LibSQLStore
などの外部ストレージプロバイダーや、PostgreStore
などの他のストレージプロバイダーを使用します。
import { LibSQLStore } from "@mastra/libsql";
const storage = new LibSQLStore({
url: "libsql://your-database.turso.io", // 外部のTursoデータベース
authToken: process.env.TURSO_AUTH_TOKEN,
});
メモリ設定の詳細については、Memory ドキュメントをご覧ください。
Dockerfile の作成
Mastra プロジェクトのルートディレクトリで Dockerfile
を作成します:
FROM node:22-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY src ./src
RUN npx mastra build
RUN apk add --no-cache gcompat
COPY --from=public.ecr.aws/awsguru/aws-lambda-adapter:0.9.0 /lambda-adapter /opt/extensions/lambda-adapter
RUN addgroup -g 1001 -S nodejs && \
adduser -S mastra -u 1001 && \
chown -R mastra:nodejs /app
USER mastra
ENV PORT=8080
ENV NODE_ENV=production
ENV READINESS_CHECK_PATH="/api"
EXPOSE 8080
CMD ["node", "--import=./.mastra/output/instrumentation.mjs", ".mastra/output/index.mjs"]
ビルドとデプロイ
環境変数を設定する
デプロイ用の環境変数を設定します:
export PROJECT_NAME="your-mastra-app"
export AWS_REGION="us-east-1"
export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
Docker イメージをビルドする
ローカルで Docker イメージをビルドします:
docker build -t "$PROJECT_NAME" .
ECR リポジトリを作成する
Docker イメージを保存する Amazon ECR リポジトリを作成します:
aws ecr create-repository --repository-name "$PROJECT_NAME" --region "$AWS_REGION"
Docker を ECR に認証する
Amazon ECR にログインします:
aws ecr get-login-password --region "$AWS_REGION" | docker login --username AWS --password-stdin "$AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com"
イメージにタグ付けしてプッシュする
ECR リポジトリの URI を使ってイメージにタグを付け、プッシュします:
docker tag "$PROJECT_NAME":latest "$AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$PROJECT_NAME":latest
docker push "$AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$PROJECT_NAME":latest
Lambda 関数を作成する
AWS コンソールで Lambda 関数を作成します:
- AWS Lambda Console に移動
- Create function をクリック
- Container image を選択
- 関数を設定します:
- Function name: 関数名(例:
mastra-app
) - Container image URI: Browse images をクリックし、ECR リポジトリを選択して
latest
タグを選ぶ - Architecture: Docker ビルドに合うアーキテクチャを選択(通常は
x86_64
)
- Function name: 関数名(例:
Function URL を設定する
外部アクセス用に Function URL を有効化します:
- Lambda 関数の設定で Configuration > Function URL に移動
- Create function URL をクリック
- Auth type を NONE に設定(パブリックアクセス)
- CORS を設定:
- Allow-Origin:
*
(本番では自ドメインに制限) - Allow-Headers:
content-type
- Allow-Methods:
*
(本番では精査して制限)
- Allow-Origin:
- Save をクリック
環境変数を設定する
Lambda 関数の設定で環境変数を追加します:
- Configuration > Environment variables に移動
- Mastra アプリに必要な変数を追加:
OPENAI_API_KEY
: OpenAI を使用する場合の API キーANTHROPIC_API_KEY
: Anthropic を使用する場合の API キーTURSO_AUTH_TOKEN
: Turso を使用する LibSQL の認証トークン- 必要に応じて他のプロバイダーの API キー
関数設定を調整する
関数のメモリとタイムアウトを設定します:
- Configuration > General configuration に移動
- 以下を推奨値として設定:
- Memory: 512 MB(必要に応じて調整)
- Timeout: 30 秒(必要に応じて調整)
- Ephemeral storage: 512 MB(任意、一時ファイル用)
デプロイのテスト
デプロイが完了したら、Lambda 関数をテストします:
- Lambda コンソールで Function URL をコピーします
- ブラウザでその URL にアクセスし、Mastra のサーバーのホーム画面を表示します
- 生成された API エンドポイントを使用して、エージェントとワークフローをテストします
利用可能な API エンドポイントの詳細は、サーバーのドキュメントを参照してください。
クライアントの接続
クライアントアプリケーションを更新し、Lambda の関数 URL を使用するようにします。
import { MastraClient } from "@mastra/client-js";
const mastraClient = new MastraClient({
baseUrl: "https://あなたの-function-url.lambda-url.us-east-1.on.aws",
});
トラブルシューティング
関数のタイムアウトエラー
Lambda 関数がタイムアウトする場合:
- Configuration > General configuration でタイムアウト値を延長する
- コールドスタートを短縮するように Mastra アプリケーションを最適化する
- パフォーマンスを安定させるためにプロビジョンド同時実行の利用を検討する
メモリに関する問題
メモリ関連のエラーが発生した場合は、次の対処を行ってください。
- Configuration > General configuration でメモリの割り当てを増やす
- CloudWatch Logs でメモリ使用状況を監視する
- アプリケーションのメモリ使用量を最適化する
CORS の問題
エンドポイントにはアクセス時に CORS エラーが出るが、ホームページでは発生しない場合:
- Mastra サーバーの設定で CORS ヘッダーが正しく設定されているか確認する
- Lambda Function URL の CORS 設定を確認する
- クライアントが正しい URL にリクエストしていることを確認する
コンテナイメージに関する問題
Lambda 関数の起動に失敗する場合:
- Docker イメージがローカルで正常にビルドできることを確認する
- Dockerfile の
CMD
命令が正しいかを確認する - コンテナの起動エラーについて CloudWatch Logs を確認する
- Lambda Web Adapter がコンテナに正しくインストールされていることを確認する
本番運用の考慮事項
本番環境へのデプロイ時には、次の点を検討してください:
セキュリティ
- CORS の許可元は信頼できるドメインに限定する
- 他の AWS サービスへの安全なアクセスには AWS IAM ロールを使用する
- 機密性の高い環境変数は AWS Secrets Manager または Parameter Store に保存する
監視
- Lambda 関数の CloudWatch モニタリングを有効にする
- エラーやパフォーマンスメトリクス向けに CloudWatch アラームを設定する
- 分散トレーシングには AWS X-Ray を使用する
スケーリング
- 予測可能なパフォーマンスのためにプロビジョンドコンカレンシーを設定する
- 同時実行数を監視し、必要に応じて上限を調整する
- より複雑なルーティングが必要な場合は Application Load Balancer の利用を検討する