
GAになった Lambda Web Functions を東京リージョンで試してみた
はじめに
2026 年 10 月 12 日、AWS Lambda Web Functions が GA(一般提供)になりました。
10 月 1 日に SDK や CLI へ追加されていた仕組みが、今回正式公開となりました。先行して追加されていた内容については、以下の記事で解説しています。
今回は、東京リージョン(ap-northeast-1)に Lambda Web Functions をデプロイして試してみました。
Lambda Web Functions とは
Lambda Web Functions は、アプリのコードが HTTP リクエストを直接受け取って処理する、新しいタイプの Lambda 関数です。Express や Hono などのフレームワークを、AWS Lambda Web Adapter のような変換用のアダプターを使わずに動かせます。対応するランタイムは Node.js 24(nodejs24.x)です。提供リージョンは米国東部(バージニア北部、オハイオ)、米国西部(オレゴン)、アジアパシフィック(東京)、欧州(アイルランド)の 5 つです。
課金の対象は、リクエスト数、アクティブな CPU 時間、実行環境が動いている間のメモリ、標準のデータ転送量です。料金は 1 ms 単位で計算されます。データベースや他のサービスの応答を待っている間は、CPU 時間は課金されません。
リクエストの料金は、東京とバージニア北部のどちらも 100 万リクエストあたり $0.30 です。vCPU とメモリの単価は次のとおりです。
| 項目 | アジアパシフィック(東京) | 米国東部(バージニア北部) |
|---|---|---|
| アクティブ vCPU | $0.0000322421 / vCPU-秒 | $0.0000276944 / vCPU-秒 |
| メモリ | $0.0000042688 / GB-秒 | $0.0000036667 / GB-秒 |
従来の Lambda との比較
バージニア北部の単価で、従来の Lambda(Event Functions、Arm)と比較すると次のとおりです。
| 項目 | Web Functions | 従来の Lambda(Event Functions) |
|---|---|---|
| リクエスト | $0.30 / 100万 | $0.20 / 100万 |
| メモリ | $0.0000036667 / GB-秒 | $0.0000133334 / GB-秒 |
| CPU | $0.0000276944 / vCPU-秒(アクティブな時間だけ) | メモリ料金に含まれる |
--hello-world のサンプルアプリをデプロイする
deploy コマンドに --hello-world を付けると、サンプルアプリの生成からデプロイまでが 1 コマンドで完了します。
aws lambda-web deploy --name ga-hello --hello-world --create --region ap-northeast-1
Creating starter application in ./ga-hello ...
Creating deployment package ...
Preparing Amazon S3 bucket ...
Preparing AWS IAM execution role ...
Uploading deployment package ...
Creating Lambda Web Function ...
https://xxxxxxxxxxxxxxxx.xxx.lambda-web.ap-northeast-1.on.aws
実行には約 26 秒かかりました。表示された URL に curl でアクセスしました。
curl -sS -i https://xxxxxxxxxxxxxxxx.xxx.lambda-web.ap-northeast-1.on.aws/
HTTP/1.1 200 OK
Content-Type: application/json
lambda-web-logstream: 2026/10/12/ga-hello[rev-xxxxx]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
lambda-web-request-id: XXXXXXXXXXXXXXXXXXXXXXXXXX
{"message":"Hello from Lambda Web!","path":"/"}
生成された 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}`);
});
Express アプリをデプロイする
自分のコードをデプロイするときは、--hello-world の代わりに --code でディレクトリを指定します。deploy は依存パッケージを解決しないので、node_modules を先に用意しておきます。
npm install express@5.3.0
アプリのコードと package.json は次のとおりです。
index.js と package.json
const express = require('express');
const app = express();
const [host, port] = (process.env.AWS_LAMBDA_HTTP_ENDPOINT || 'localhost:3000').split(':');
const startedAt = Date.now();
// 環境情報
app.get('/', (request, response) => {
response.json({
pid: process.pid,
node: process.version,
region: process.env.AWS_REGION,
httpEndpoint: process.env.AWS_LAMBDA_HTTP_ENDPOINT,
uptimeMs: Date.now() - startedAt,
requestId: request.get('lambda-web-request-id')
});
});
// 公式サンプルの SSE(1秒ごと)
app.get('/events', (request, response) => {
response.setHeader('Content-Type', 'text/event-stream');
response.setHeader('Cache-Control', 'no-cache');
response.flushHeaders();
const interval = setInterval(() => {
response.write(`data: ${JSON.stringify({ time: Date.now() })}\n\n`);
}, 1000);
response.on('close', () => {
clearInterval(interval);
});
});
app.listen(Number(port), host, () => {
console.log(`listening on ${host}:${port}`);
});
{
"name": "ga-express",
"version": "1.0.0",
"private": true,
"main": "index.js",
"dependencies": {
"express": "5.3.0"
}
}
node_modules を用意したディレクトリで、次のコマンドを実行しました。
aws lambda-web deploy --name ga-express --code . --create --region ap-northeast-1
Creating deployment package ...
Preparing Amazon S3 bucket ...
Preparing AWS IAM execution role ...
Uploading deployment package ...
Creating Lambda Web Function ...
https://xxxxxxxxxxxxxxxx.xxx.lambda-web.ap-northeast-1.on.aws
約 24 秒で公開 URL が表示されました。この URL の / に curl でアクセスすると、Express が応答しました。
curl -sS -i https://xxxxxxxxxxxxxxxx.xxx.lambda-web.ap-northeast-1.on.aws/
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
X-Powered-By: Express
{"pid":2,"node":"v24.21.0","region":"ap-northeast-1","httpEndpoint":"0.0.0.0:3000","uptimeMs":31,"requestId":"XXXXXXXXXXXXXXXXXXXXXXXXXX"}
SSE でレスポンスをストリーミングする
SSE を返す /events に curl で 6 秒間接続しました。
timeout 6 curl -sS -N -i <URL>/events
応答の Content-Type は text/event-stream で、アプリが 1 秒ごとに送るイベントが curl に 5 件届きました。受信間隔は 993〜1002 ms でした。
まとめ
GA となった Lambda Web Functions では、AWS Lambda Web Adapter などを使わずに HTTP サーバーを Lambda で動かせます。
従来の Lambda と比べて、1 つの実行環境で多数のリクエストを受け付けられるため、実行環境の利用効率の改善が期待できます。また、リクエスト単価は上がりますが、アクティブな CPU 時間に応じて課金されるため、外部 API の待ち時間が長くなりがちなワークロードでは、費用を抑えられる可能性があります。
一方で、メモリは実行環境が稼働している間ずっと課金されます。アクセス頻度が少なく、コールドスタートが問題にならないワークロードでは、従来の Lambda のほうが費用対効果が良いケースもありそうです。
東京リージョンでも、Node.js ランタイムで Lambda Web Functions を利用できます。Web アプリの新しい選択肢の一つとして、お試しください。









