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 分 無制限
スケーリング ミリ秒
コスト (低トラフィック) 安い (従量課金) 高い (常時稼働)
コスト (高トラフィック) 高くなる場合あり 安定

実務での活用方法は関連書籍にも詳しい。

関連用語