AWS Lambda Web Functionsは2026年10月12日に発表された、Lambdaの新しい実行形態です。
Express、Hono、Fastify、Next.jsといった普通のWebサーバーを、イベントハンドラーに書き換えずにそのままLambdaで動かせます。
これに伴い従来のイベント起動型Lambdaを Web Functionsとの対比でEvent Functionsと呼ぶようになりました。
また過去以下の記事で紹介したステートを保持できる Lambda MicroVMs を合わせてLambdaはこれで3モードを具備することになりました。
https://serverless.co.jp/blog/q_jbc6mp3a/
環境変数 AWS_LAMBDA_HTTP_ENDPOINT に待ち受けアドレスを入れておきサーバーはそこで待ち受けます。起動はローカルと同じ node index.js で動きます。
リリース時点で東京リージョンに対応していますがまだ対応環境が限定されており、ランタイムはNode.js 24(Arm64)のみとなっています。
それ以外にも最近はLambdaのアップデートが続ています。
AWS Lambda がコンテナベース関数で SnapStart をサポートしたのでやってみた
https://serverless.co.jp/blog/mg55x-8pn79/
AWS LambdaがAmazon S3 Filesの直接読み取り設定をサポートしたのでやってみた
https://serverless.co.jp/blog/qqh7_nye3e/
AWS Lambda の「自己管理型 S3 コードストレージ」を使ってみた — 東京リージョンで REFERENCE モードを試す
https://serverless.co.jp/blog/n9u3zz9nl3/
AWS LambdaがAvailability Zone metadataをサポートしました
https://serverless.co.jp/blog/9e6of5401tzk/
AWS Lambdaの新しい選択肢AWS Lambda Managed Instanceとは?実際にEC2を起動して動かしてみた
https://serverless.co.jp/blog/q9iar9xn6v57/
さすがAWSといったところです。
LWA (Lambda Web Adaptor) との違い
Lambdaには従来Webフレームワークを動作せるためLWAというものが用意されていました。
AWS Lambda Web AdaptorがGAしたので触ってみる
https://serverless.co.jp/blog/zk3qigvmd_6/
AWS Lambda Web Adapter × SnapStartでコールドスタートを改善する
https://serverless.co.jp/blog/v2x79gmkf/
EC2上でLambda関数を動作させる特殊モードであるLambda Managed Instance を除くと今回のアップデートであるWeb Functionsとの違いは以下の通りです。
観点 | LWA + 通常Lambda | Web Functions |
|---|---|---|
同時実行 | 1環境1リクエスト | 1環境で最大128 |
Managed Instance の場合は、1環境で複数リクエストを処理するモードが備わっていますが、EC2料金の115%分が発生し続けることを考えると少し選択肢としては特殊といえます。
1環境で最大128リクエストを処理できるWeb Functionsの方がよりWebサーバ的な利用ができるといえます。
さっそくやってみる
まずAWS CLIをバージョンアップします。
curl -o awscliv2.zip https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip && unzip -o awscliv2.zip && sudo ./aws/install --update関数を作成します。
aws lambda-web deploy --name my-web-app --hello-worldCreating starter application in ./my-web-app ...
Creating deployment package ...
Preparing Amazon S3 bucket ...
Preparing AWS IAM execution role ...
Uploading deployment package ...
Creating Lambda Web Function ...
Waiting for endpoint to become active (timeout 600s) ...
Waiting for endpoint to become active (state Pending, 0s elapsed, timeout 600s) ...
Waiting for endpoint to become active (state Pending, 5s elapsed, timeout 600s) ...
https://s6zb63f18rn3gwy0.9dy.lambda-web.us-west-2.on.aws
Console: https://us-west-2.console.aws.amazon.com/lambda/home#/web-functions/my-web-appではアクセスしてみます。
curl https://s6zb63f18rn3gwy0.9dy.lambda-web.us-west-2.on.aws/{"message":"Hello from Lambda Web!","path":"/"}無事Web Functionsの作成が完了しています。
以下の内容でデプロイされています。
~/my-web-app$ more server.ts
// Minimal AWS Lambda Web Function HTTP server.
//
// You can replace this with any code or framework that starts an HTTP server.
import http from 'node:http';
// Lambda sends requests to port 3000. Set LOCAL_PORT for local development.
const port = Number(process.env.LOCAL_PORT ?? 3000);
const server = http.createServer((req, res) => {
res.writeHead(200, { 'content-type': 'application/json' });
res.end(JSON.stringify({ message: 'Hello from Lambda Web!', path: req.url }));
});
server.listen(port, () => {
console.log(`listening on port ${port}`);
});
