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 がデフォルト推奨。

主な機能

使うべきパターン

使わない方が良いパターン

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 でも選択可能。