Lambda
AWS のサーバーレスコンピューティングサービスで、コードをイベント駆動で実行する
AWSサーバーレス
Lambda とは
AWS Lambda は、サーバーの管理なしにコードをイベント駆動で実行するサーバーレスコンピューティングサービスである。API リクエスト、S3 イベント、DynamoDB Streams、スケジュールなどのトリガーで関数が起動し、実行時間に応じて課金される。
特徴
Lambda は OS、パッチ、スケーリングを AWS が管理するため、サーバー管理が不要だ。API リクエスト、S3 イベント、DynamoDB Streams などのトリガーでイベント駆動的に起動し、同時実行数に応じて自動スケールする。課金はリクエスト数と実行時間 (ミリ秒単位) の従量制で、最大実行時間は 15 分。
SAM での定義
GetUser:
Type: AWS::Serverless::Function
Properties:
Handler: index.handler
Runtime: nodejs22.x
MemorySize: 256
Timeout: 30
Events:
Api:
Type: HttpApi
Properties:
Path: /users/{id}
Method: GET
Policies:
- DynamoDBCrudPolicy:
TableName: !Ref UsersTable
Environment:
Variables:
TABLE_NAME: !Ref UsersTable
Lambda 関数の実装
import { APIGatewayProxyEventV2, APIGatewayProxyResultV2 } from 'aws-lambda';
export const handler = async (event: APIGatewayProxyEventV2): Promise<APIGatewayProxyResultV2> => {
const id = event.pathParameters?.id;
const user = await db.get({ TableName: process.env.TABLE_NAME!, Key: { id } });
if (!user.Item) return { statusCode: 404, body: 'Not Found' };
return { statusCode: 200, body: JSON.stringify(user.Item) };
};
トリガー
| トリガー | 用途 |
|---|---|
| API Gateway | REST / HTTP API |
| S3 | ファイルアップロード時の処理 |
| DynamoDB Streams | テーブル変更の処理 |
| SQS | 非同期メッセージ処理 |
| EventBridge | スケジュール実行、イベントルーティング |
| CloudWatch Logs | ログのフィルタリング |
コールドスタート
コールドスタート: 実行環境の初期化 (100ms〜数秒)
→ 初回リクエストのレイテンシが増加
対策:
- Provisioned Concurrency: 事前にウォームアップ
- SnapStart (Java): スナップショットから高速起動
- 軽量ランタイム: Node.js, Python (Go, Rust はさらに高速)
ECS との使い分け
| 観点 | Lambda | ECS (Fargate) |
|---|---|---|
| 実行時間 | 最大 15 分 | 無制限 |
| スケーリング | ミリ秒 | 分 |
| コスト (低トラフィック) | 安い (従量課金) | 高い (常時稼働) |
| コスト (高トラフィック) | 高くなる場合あり | 安定 |
実務での活用方法は関連書籍にも詳しい。