Agentive
ツールレビュー

サーバーレス×AI — Lambda/Workers/Edge Functionsの使い分け

約5分で読めます

サーバーレス×AI — Lambda/Workers/Edge Functionsの使い分け

AIアプリケーションのバックエンドにサーバーレスを採用するケースが増えている。しかしプラットフォームごとに制約が異なり、AIワークロード特有の注意点もある。Lambda・Workers・Edge Functionsの特性を比較し、最適な選択基準を示す。

プラットフォーム比較表

項目AWS LambdaCloudflare WorkersVercel Edge Functions
最大実行時間15分30秒(Unbound: 15分)30秒
メモリ上限10GB128MB128MB
コールドスタート100-500ms0ms(V8 Isolate)0ms(V8 Isolate)
リージョン選択可能全エッジ自動全エッジ自動
料金体系リクエスト数+実行時間リクエスト数リクエスト数
無料枠100万リクエスト/月10万リクエスト/日10万リクエスト/月
AI向き度長時間処理に最適低レイテンシに最適フロントエンド連携に最適

AIワークロード別おすすめ

ユースケース推奨理由
チャットAPI(ストリーミング)Cloudflare Workersコールドスタートゼロ、エッジ配信
バッチ文書処理AWS Lambda15分の実行時間、大容量メモリ
リアルタイム翻訳Vercel Edge FunctionsNext.jsとの統合、低レイテンシ
画像分析パイプラインAWS Lambdaメモリ10GBで大画像処理可能
API Gateway/ProxyCloudflare Workersグローバルエッジ、KVストレージ

AWS Lambda — AIバックエンド実装

# handler.py
import json
from anthropic import Anthropic

client = Anthropic()

def chat_handler(event, context):
    """AI チャットAPIのLambdaハンドラー"""
    body = json.loads(event["body"])

    response = client.messages.create(
        model="claude-sonnet-4-5-20250514",
        max_tokens=2048,
        messages=body["messages"]
    )

    return {
        "statusCode": 200,
        "headers": {
            "Content-Type": "application/json",
            "Access-Control-Allow-Origin": "*"
        },
        "body": json.dumps({
            "content": response.content[0].text,
            "usage": {
                "input_tokens": response.usage.input_tokens,
                "output_tokens": response.usage.output_tokens
            }
        })
    }

Cloudflare Workers — ストリーミング対応

export default {
  async fetch(request, env) {
    const body = await request.json();

    const aiResponse = await fetch("https://api.anthropic.com/v1/messages", {
      method: "POST",
      headers: {
        "x-api-key": env.ANTHROPIC_API_KEY,
        "anthropic-version": "2023-06-01",
        "Content-Type": "application/json"
      },
      body: JSON.stringify({
        model: "claude-sonnet-4-5-20250514",
        max_tokens: 2048,
        stream: true,
        messages: body.messages
      })
    });

    // SSEストリームをそのままクライアントに転送
    return new Response(aiResponse.body, {
      headers: {
        "Content-Type": "text/event-stream",
        "Cache-Control": "no-cache",
        "Access-Control-Allow-Origin": "*"
      }
    });
  }
};

Vercel Edge Functions — Next.js統合

// app/api/chat/route.ts
import Anthropic from "@anthropic-ai/sdk";

export const runtime = "edge";

const client = new Anthropic({
  apiKey: process.env.ANTHROPIC_API_KEY!,
});

export async function POST(request: Request) {
  const { messages } = await request.json();

  const response = await client.messages.create({
    model: "claude-sonnet-4-5-20250514",
    max_tokens: 2048,
    messages,
  });

  return Response.json({
    content: response.content[0].text,
  });
}

デプロイ手順の比較

AWS Lambda:

# SAM CLIでデプロイ
sam build
sam deploy --guided --stack-name ai-backend

Cloudflare Workers:

# Wrangler CLIでデプロイ
npx wrangler deploy
npx wrangler secret put ANTHROPIC_API_KEY

Vercel Edge Functions:

# Vercel CLIでデプロイ
vercel --prod
vercel env add ANTHROPIC_API_KEY

コスト比較(月間10万リクエスト想定)

プラットフォーム月額コスト備考
AWS Lambda$0.20 + 実行時間無料枠内に収まる場合も
Cloudflare Workers$5(Paid plan)無料枠は日10万リクエスト
Vercel Edge$20(Pro plan)無料枠超過時

実際のコストはAI APIの利用料金が支配的であり、サーバーレス基盤のコストは微小だ。選択基準はコストよりも機能要件で決めるべきだ。

まとめ

AIワークロードには「長時間処理ならLambda」「低レイテンシならWorkers」「フロントエンド統合ならEdge Functions」が基本方針だ。いずれもAI APIへのプロキシとして十分な性能を持つ。

関連記事

A

Agentive 編集部

AIエージェントを実際に使い倒す個人開発者。サイト制作の自動化を実践しながら、その知見を発信しています。