サーバーレス×AI — Lambda/Workers/Edge Functionsの使い分け
約5分で読めます
サーバーレス×AI — Lambda/Workers/Edge Functionsの使い分け
AIアプリケーションのバックエンドにサーバーレスを採用するケースが増えている。しかしプラットフォームごとに制約が異なり、AIワークロード特有の注意点もある。Lambda・Workers・Edge Functionsの特性を比較し、最適な選択基準を示す。
プラットフォーム比較表
| 項目 | AWS Lambda | Cloudflare Workers | Vercel Edge Functions |
|---|---|---|---|
| 最大実行時間 | 15分 | 30秒(Unbound: 15分) | 30秒 |
| メモリ上限 | 10GB | 128MB | 128MB |
| コールドスタート | 100-500ms | 0ms(V8 Isolate) | 0ms(V8 Isolate) |
| リージョン | 選択可能 | 全エッジ自動 | 全エッジ自動 |
| 料金体系 | リクエスト数+実行時間 | リクエスト数 | リクエスト数 |
| 無料枠 | 100万リクエスト/月 | 10万リクエスト/日 | 10万リクエスト/月 |
| AI向き度 | 長時間処理に最適 | 低レイテンシに最適 | フロントエンド連携に最適 |
AIワークロード別おすすめ
| ユースケース | 推奨 | 理由 |
|---|---|---|
| チャットAPI(ストリーミング) | Cloudflare Workers | コールドスタートゼロ、エッジ配信 |
| バッチ文書処理 | AWS Lambda | 15分の実行時間、大容量メモリ |
| リアルタイム翻訳 | Vercel Edge Functions | Next.jsとの統合、低レイテンシ |
| 画像分析パイプライン | AWS Lambda | メモリ10GBで大画像処理可能 |
| API Gateway/Proxy | Cloudflare 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エージェントを実際に使い倒す個人開発者。サイト制作の自動化を実践しながら、その知見を発信しています。