Lambda の実行環境(Node.js・Python・Go)使い分け完全ガイド

AWS Lambda の主要ランタイム Node.js・Python・Go を、コールドスタート速度・実行性能・ライブラリ事情・運用負荷・コストの 5 軸で徹底比較。Graviton2(arm64)・SnapStart・Provisioned Concurrency まで含めて、用途別の選択指針を整理する。

Lambda のランタイム選びは「速度・エコシステム・運用負荷・コスト」の四項対立。Node.js と Python が利用シェア 9 割を占める一方、コンパイル言語の Go はコールドスタート 50〜100ms・低メモリで台頭中。用途に合わせて選ぶための判断軸を整理する。


1. 概要(端的に)

AWS Lambda の主要マネージドランタイムは 2026 年時点で Node.js / Python / Java / .NET / Ruby / Go(カスタムランタイム) の 6 系統。実利用ではこのうち Python と Node.js で全体の 9 割を占める(Datadog の State of Serverless より)。

ランタイムの違いは以下の 4 軸で表れる。

  • コールドスタート速度 — 実行環境の準備時間。Go が最速、Java が最遅。
  • ライブラリ・SDK エコシステム — Python は AI/ML、Node.js は Web、Go は同時実行とインフラ系に強い。
  • 運用負荷(EoL 頻度・サポート期間) — Node.js は 1〜2 年で EoL が来るが、Go はバイナリ提供で寿命が長い。
  • コスト効率 — メモリ消費と実行時間の積で決まり、Go > Python > Node.js の傾向。

「迷ったら Python」が無難解だが、SLA がシビアな API は Go、**フロントと型を揃えたい現場は TypeScript(Node.js)**が定石になりつつある。


2. 主要ランタイム比較(早見表)

Lambda 主要ランタイム比較(2026-05 時点)
評価項目
Node.js 22
Python 3.13 推奨
Go(provided.al2023)
提供形態 マネージド マネージド カスタムランタイム(バイナリ)
コールドスタート (p50) 200〜350 ms 200〜400 ms 50〜100 ms
ウォーム実行 速い 速い 最速・最小メモリ
AWS SDK AWS SDK v3(モジュラー) boto3(成熟) aws-sdk-go-v2(堅実)
AI/ML ライブラリ 極めて多い
型システム TypeScript で導入可 型ヒント/mypy(任意) 静的型(強制)
ローカルデバッグ 容易(VS Code) 容易(VS Code) やや手間(バイナリ更新)
EoL/サポート期間 約 2 年で次バージョン強制 約 3 年 AWS の OS LTS 期間(長い)
SnapStart 対応 未対応(Java/Python/.NET のみ) 対応(2024-11〜) 未対応(不要)
推奨ユースケース BFF・GraphQL・SaaS Webhook ETL・ML 推論・Bedrock 連携 高 TPS API・ストリーム処理
迷ったら Python、シビアな性能要件は Go、フロントと型を揃えたいなら Node.js(TypeScript)。

3. コールドスタートの構造

コールドスタートは下記 4 段階で構成される。ランタイムにより負担の重い段階が異なる

  1. コードダウンロード — S3 から関数 ZIP / ECR からコンテナイメージを取得(パッケージサイズに比例)
  2. 実行環境の起動 — Firecracker microVM のブート(一律 〜100 ms)
  3. ランタイム初期化 — V8 / CPython / Go バイナリの読み込み(言語差が大きい)
  4. コード初期化importrequire と初期化ロジックの実行(依存ライブラリ数に比例)

段階別の傾向

段階Node.jsPythonGo
1. ダウンロード中(node_modules が肥大化しやすい)中(boto3・pandas 等で肥大化)小(単一バイナリ)
2. 実行環境同等同等同等
3. ランタイム中(V8 起動)中(CPython 起動)極小(バイナリ即実行)
4. コード初期化中〜大中〜大(pandas/numpy で重い)極小

コールドスタートを避ける 3 つの仕組み

  • Provisioned Concurrency — 指定数の実行環境を常時ウォームに保つ。追加料金が発生するが、ピーク時の安定性は最高。
  • SnapStart — 関数初期化後のメモリ状態をスナップショット化して再利用。Java / Python / .NET で利用可。Node.js / Go は未対応。
  • Lambda SnapStart(Python 2024-11〜) — boto3 や ML モデルのロードを SnapStart に乗せると、Python のコールド時間が大幅に縮む。

4. 各ランタイムの仕様と特徴

4-1. Node.js 22(推奨:BFF・GraphQL・Web 系)

  • エコシステム — npm の充実度は圧倒的。フロントエンドと型・コード資産を共有できるのが最大の利点。
  • AWS SDK v3 — モジュラー化により @aws-sdk/client-s3 だけを取り込めばパッケージサイズを最小化できる。
  • 苦手領域 — CPU バウンドな数値処理は Python の numpy / Go の goroutine に劣る。
  • EoL の頻度 — 偶数バージョンが LTS だが、Lambda 側のサポートは約 2 年で打ち切られる。強制アップグレード運用を覚悟しておく。

4-2. Python 3.13(推奨:ETL・ML 推論・Bedrock 連携)

  • エコシステム — boto3 が事実上のリファレンス実装。pandas / numpy / Polars でデータ処理が圧倒的に書きやすい。
  • Bedrock / SageMaker / Comprehend — AWS の AI 系 SDK は Python が一級市民。サンプルコードも Python が最多。
  • 苦手領域 — GIL の制約で純粋な並列処理は不得意。CPU 並列が要る場合は ECS / Fargate を選ぶ。
  • SnapStart 対応 2024-11〜 — boto3 や ML モデルのロード時間がスナップショット化され、コールドスタートが激減。

4-3. Go(推奨:高 TPS API・ストリーム処理)

  • 形態 — マネージドランタイムは 2024 年に廃止され、provided.al2023 上にバイナリを乗せるカスタムランタイムとして運用する。
  • 強み — 単一バイナリ・goroutine による高い並行処理性能・最速のコールドスタート(50〜100 ms)。
  • メモリ効率 — 同等処理を Node.js 比で メモリ 50〜70%・実行時間 40〜60% に抑えられる事例が多い(One Technology Japan の事例では「コスト 85% 削減」)。
  • 苦手領域 — AI/ML 系ライブラリと UI 系ロジック。クライアント SDK の網羅性も Python / Node.js より一段落ちる。
  • EoL — 自前バイナリのため、OS(Amazon Linux 2023)の LTS が切れない限り長期運用できる。

5. 用途別の選択指針

5-1. API Gateway 経由のリクエスト処理(同期・低レイテンシ要件)

  • 第一候補:Go — コールドスタート 50〜100 ms、ウォーム時のレイテンシも安定。
  • 第二候補:Node.js(TypeScript) — フロントと型を共有したい場合。
  • 避ける:Java(SnapStart なし) — レイテンシ要件 200 ms 以下なら不利。

5-2. S3 → Lambda → DynamoDB の ETL

  • 第一候補:Python — boto3 と pandas でファイル処理を最短記述。
  • 第二候補:Node.js — JSON 主体の軽量変換ならこちらも好相性。
  • 大量データなら:Lambda ではなく Glue / Step Functions Map / EMR Serverless へ。

5-3. SQS / Kinesis のストリーム処理

  • 第一候補:Go — goroutine で 1 レコードずつ並列処理しやすい。
  • 第二候補:Python — ParallelizationFactor を上げて並列化する設計が定番。
  • コスト最優先:Go の優位が顕著。同一スループットで Lambda 実行時間が半分以下になる事例も。

5-4. Bedrock / SageMaker 連携(生成 AI)

  • ほぼ一択:Python — Bedrock 公式 SDK の主言語。LangChain・LlamaIndex 等のラッパーも Python 中心。
  • 代替:Node.js@aws-sdk/client-bedrock-runtime で TypeScript 化も可能。本番フロント連動なら有力。

5-5. Cron / 定期実行(EventBridge Scheduler)

  • 規模が小さければ Python — 書きやすさ・読みやすさ重視。
  • 頻度が高く・処理が短いものは Go — メモリ最小化でコストが激減する。

6. メリット・デメリット


7. ベストプラクティス

  • アーキテクチャはまず arm64 — 互換性が取れる関数は最優先で arm64 に変更。料金 20% 減・コールドスタート短縮。
  • 「Python は SnapStart、Go はそのまま、Node.js は Provisioned Concurrency」 が 2026 年の定番分担。
  • 依存パッケージは最小化 — Lambda Layers で共通依存を分離し、関数本体の ZIP を 50 MB 以下に保つ。
  • 計測してから最適化 — まず Init Duration を CloudWatch でモニタし、本当に遅いのか/頻度はどうかを確認してから対策を打つ。
  • 複数ランタイム混在を許容する — 「Web 系は Node.js/ETL は Python/高 TPS は Go」のように関数単位で最適言語を選ぶ。Step Functions で連結すれば運用上の摩擦は小さい。
  • EoL カレンダーを CI に組み込むaws lambda list-functions の Runtime をスキャンし、EoL 6 ヶ月前にアラートを出す仕組みを最初に作る。
  • コンテナイメージ Lambda の活用 — 250 MB を超える依存(pandas + numpy + ML モデル等)はコンテナ化が現実解。10 GB までイメージサイズに耐える。

8. 関連用語


9. 関連サイト

AWS 公式

参考記事



🎓 試験での出題傾向

試験重要度主な出題パターン
CLFLambda が複数ランタイム対応であることの理解
SAAコールドスタート要件に対する SnapStart / Provisioned Concurrency の選択
DVAランタイム別の特徴・SDK・EoL 管理・Layers 設計
SOAEoL 監視、CloudWatch での Init Duration モニタ

特に DVA では「遅延に厳しい API でコールドスタートを最小化したい」「boto3 を使った大規模 ETL で初期化を高速化したい」のような選択問題が頻出。SnapStart は Python / Java / .NET のみ対応・Node.js と Go は未対応という事実は試験でも実務でもよく問われるため必ず押さえる。