Lambda — サーバレス関数
概要
AWS Lambda は「呼び出された時だけコードを実行する」サーバレス実行環境です。 Node.js / Python / Java / Go / Ruby / .NET / カスタムランタイム (コンテナイメージ) に対応し、 実行時間とメモリ × ms に対して課金される従量制。サーバを管理しなくて良いため、コードを書いて動作環境を IAM Role で固めるだけで運用が成立します。
AWS サーバレスの中核。API Gateway や EventBridge / S3 / DynamoDB Stream / SNS / SQS と組み合わせて、イベントドリブンに「動く」アプリを構築できます。 Graviton (arm64) で実行すると同性能で 20% 安いので、新規は arm64 がデフォルト推奨。
主な機能
- Runtime — Node.js 22 / Python 3.13 / Java 21 / Go / .NET 等。コンテナイメージ持ち込みも可。
- Memory — 128MB 〜 10240MB。CPU は メモリに比例。
- Timeout — 最大 15 分。長時間バッチには向かない。
- Layer — 共通ライブラリを別パッケージ化して複数 Lambda で共有。
- Concurrency — 同時実行数。Reserved / Provisioned Concurrency で制御可。
- Cold Start — 初回起動時のオーバーヘッド。Provisioned Concurrency で回避可(追加料金)。
- VPC 連携 — VPC 内リソース (RDS 等) にアクセスする時に使う。ENI 周りのコールドスタート増加は改善されている。
- Alias / Version — 不変な Version とそれを指す可変ポインタ Alias。Blue/Green デプロイ向け。
- Function URL — API Gateway を介さずに Lambda を HTTPS で直接公開する機能。簡易な API に。
- Destinations — 非同期実行の成功/失敗イベントを SNS/SQS/EventBridge に送る。
使うべきパターン
- API バックエンド — API Gateway + Lambda + DynamoDB の三種の神器。月 100 リクエストまで無料、1M リクエストで $0.2。
- S3 / DynamoDB / SQS のイベント処理 — オブジェクトアップロード時にサムネイル生成、行追加時に通知、等。
- EventBridge cron — 毎日 02:00 にクローラを動かす、月初にレポート生成、等。
- 軽量 ETL — メモリ 10GB / 15 分以内に終わる処理。
- Webhook 受信 — GitHub / Stripe / LINE 等の Webhook を受けて DB に書く。
使わない方が良いパターン
- 15 分以上かかる処理 — Step Functions / ECS Fargate / Batch を検討。
- 常駐サーバ要件 — TCP 長時間接続、WebSocket(API GW WebSocket は別)など。
- 低レイテンシ p99 が厳しい — Cold Start で 1〜数秒かかる。Provisioned Concurrency で緩和できるが追加料金。
- 大量バッチで CPU 性能命 — EC2 / Fargate Spot の方がコスパ良い。
- 大容量メモリが必要 — Lambda は 10GB 上限。
Terraform 最小サンプル(zip デプロイ)
data "archive_file" "fn" {
type = "zip"
source_file = "${path.module}/handler.mjs"
output_path = "${path.module}/fn.zip"
}
resource "aws_iam_role" "fn" {
name = "myfn-exec"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Principal = { Service = "lambda.amazonaws.com" }
Action = "sts:AssumeRole"
}]
})
}
resource "aws_iam_role_policy_attachment" "logs" {
role = aws_iam_role.fn.name
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
}
resource "aws_lambda_function" "fn" {
function_name = "myfn"
runtime = "nodejs22.x"
architectures = ["arm64"] # Graviton で安く
memory_size = 256
timeout = 10
role = aws_iam_role.fn.arn
handler = "handler.handler"
filename = data.archive_file.fn.output_path
source_code_hash = data.archive_file.fn.output_base64sha256
environment {
variables = { LOG_LEVEL = "info" }
}
}
resource "aws_cloudwatch_log_group" "fn" {
name = "/aws/lambda/myfn"
retention_in_days = 14 # コスト垂れ流し防止
}
用語集
- Runtime
- Lambda の言語実行環境。Node.js / Python / Java / Go 等。
- Cold Start
- Lambda コンテナの初回起動オーバーヘッド。100ms〜数秒。
- Provisioned Concurrency
- 指定数を常時 warm に保つ機能。Cold Start を消すが追加料金。
- Reserved Concurrency
- 関数の最大同時実行数を予約。他関数への影響を防ぐ。
- Layer
- 共通ライブラリ等を別パッケージにして複数関数で共有する仕組み。最大 5 個まで。
- Alias / Version
- Version = 不変なコードスナップショット / Alias = それを指す可変ポインタ。Blue/Green デプロイに使う。
- Function URL
- API Gateway を介さずに Lambda を直接 HTTPS で公開する機能。
- Destinations
- 非同期実行の成功 / 失敗を SNS/SQS/EventBridge へ送る仕組み。
- arm64 (Graviton)
- AWS 自社製 ARM プロセッサ。x86 より 20% 安い。Lambda でも選択可能。