Lambda Web Adapter が GA

普通の Web アプリを、書き換えずにサーバーレスへ

株式会社現場サポート 技術統括室 SRE / 山脇

20260508 LT

こんなこと、ありませんか

  • Next.js や Spring Boot で書いた Web アプリを Lambda に乗せたい
    • わざわざEC2やECSを使うまでもないアプリ
  • でも handler(event, context) 形式に書き換えるのが面倒
  • ローカルでは普通に動かしたい、本番だけ Lambda にしたい

"Web アプリのまま" Lambda に持っていく方法が欲しい

20260508 LT

Lambda Web Adapter とは

AWS が公開している、Web アプリをそのまま Lambda 化するアダプター

LambdaでWebサーバーを動かす
  • Lambda Layer として配布 (LambdaAdapterLayerX86 を Layers に追加するだけ)
  • 起動時に ポート 8080 で待ち受けている Web サーバへ HTTP 転送
  • 対応: Next.js / Nuxt / Spring Boot / Rails / Django / Laravel ほか
  • ローカル・EC2・Fargate でも 同じコード がそのまま動く
20260508 LT

2026/03/27 ついに GA

長らく "便利だけどプレビュー" だった Lambda Web Adapter が
v1.0.0 で正式リリース

以前 GA 後
位置づけ 実験的ツール 本番利用 OK
並行処理 1 リクエスト / インスタンス Managed Instances で並行処理
ボディ変換 コピーあり ゼロコピー
その他 - マルチテナンシー、graceful shutdown
20260508 LT

何が嬉しいのか

  • 学習コストゼロ 普段の Web フレームワークの書き方そのまま
  • 環境差分が消える ローカル / コンテナ / Lambda で同じ起動方法
  • 移行が楽 既存のアプリをそのまま Lambda へ
  • トリガー自由 API Gateway / Function URL / ALB から選べる

"Lambda 用に書く" から "Web アプリを Lambda で動かす" へ

20260508 LT

いつもの書き方そのまま — Next.js

// app/page.tsx
export default function Page() {
  return <h1>Hello from Lambda Web Adapter</h1>;
}

// next.config.js
module.exports = { output: 'standalone' };
#!/bin/bash
# bootstrap  Next.js standalone サーバを 8080 で起動
PORT=8080 exec node server.js

SSR も API Route もそのまま Lambda で動く

20260508 LT

いつもの書き方そのまま — Laravel

// routes/web.php
Route::get('/', function () {
    return ['message' => 'Hello from Lambda Web Adapter'];
});
#!/bin/bash
# bootstrap  ポート 8080 で Laravel を起動
php artisan serve --host=0.0.0.0 --port=8080

Lambda Web Adapter が 8080 へリクエストを転送 → Laravel が応答

20260508 LT

いつもの書き方そのまま — Ruby on Rails

# config/routes.rb
Rails.application.routes.draw do
  root 'home#index'
end

# app/controllers/home_controller.rb
class HomeController < ApplicationController
  def index
    render json: { message: 'Hello from Lambda Web Adapter' }
  end
end
#!/bin/bash
# bootstrap  Puma を 8080 で起動
bundle exec rails server -b 0.0.0.0 -p 8080

Lambda Web Adapter が 8080 へリクエストを転送 → Rails が応答

20260508 LT

デプロイ手順はどれも同じ

template.yamlLayer を 1 行足すだけ で Lambda 化

Resources:
  WebApp:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: .
      Handler: run.sh
      Runtime: nodejs20.x   # php82 / ruby3.2 / java21 ...
      Layers:
        - arn:aws:lambda:ap-northeast-1:753240598075:layer:LambdaAdapterLayerX86:24
      FunctionUrlConfig:
        AuthType: NONE
sam build && sam deploy --guided
20260508 LT

注意点

便利だが Lambda であることは変わらない

  • コールドスタート Next.js / Rails で 数秒 遅延することも
  • ステートレス インメモリキャッシュ・セッションは ElastiCache 等へ
  • 実行時間制限 1 リクエスト最大 15 分 / ペイロード最大 6 MB
  • 永続接続が苦手 WebSocket は API Gateway WebSocket を別途使う

"Web アプリの皮をかぶった Lambda" であることを忘れない

20260508 LT

まとめ

書き換え不要で、Web アプリを Lambda へ
  1. GA した 本番投入できる品質に到達
  2. 学習コストが低い Next.js / Rails / Spring Boot そのまま
  3. 環境を選ばない ローカル・コンテナ・Lambda で同じコード

既存の Web アプリを "とりあえず Lambda に乗せてみる" 第一候補

20260508 LT

ご清聴ありがとうございました

参考: Lambda Web Adapter が GA に到達 (serverless.co.jp)