AWS Lambda Web Functions のネットワーク: VPC へは Network Connector、外へ出るには NAT、入口は閉じられない
2026-10-12 に出た Lambda Web Functions は、普通の Node.js HTTP サーバーを 1 プロセスで並行処理させる「AWS 版 Workers / Fluid」。ただし VPC につなぐと外向き通信に NAT Gateway が要り、入口の URL は常にインターネットから届く。
どんなときに使う?
- Web Functions を業務 API に使えるか判断するとき
- RDS など VPC 内のリソースに Web Functions からつなぐとき
前提: Web Functions とは
- 決まったポートで待ち受ける Node.js の HTTP サーバーをそのまま渡すと、Lambda が HTTPS のエンドポイントを用意し、ゼロまでスケールする
- 1 つの実行環境(プロセス)が複数のリクエストを同時に処理する。課金はアクティブな CPU 時間と保持メモリ
- 提供開始時点は Node.js 24(Arm64)。東京リージョンでも使える
- @zaru の簡単なベンチでは、重くない処理なら約 20ms で返る。気になるのはコールドスタート
- コールドスタートは 1〜1.5 秒ほど(@zaru の計測、2026-10-16)。アプリの起動や初期化の書き方しだいで変わるが、Lambda の実行環境の起動だけで約 600ms はかかっているようだ。初回のリクエストが遅くて困る API では、初期化を軽くするか前段でキャッシュする
やり方: VPC 内のリソースにつなぐ
- egress network connector を作る(
aws lambda-core create-network-connector)。サブネットは別 AZ に 2 つ以上、AssociatedComputeResourceTypesはWebFunction、ENI を管理するための operator role を渡す - connector が
ACTIVEになったらバージョン番号を控える - Web Function の revision の
serviceConfig.egressNetworkConnectorArnに、バージョン付きの ARN(...:network-connector:nc-xxxx:4)を指定して revision を作る - 接続先のセキュリティグループで、connector のセキュリティグループからの通信を許可する
connector の設定を変えたら新しいバージョンができるので、それを参照する revision を作り直さないと反映されない。
ハマりどころ
- connector を付けると外向きの経路が VPC に切り替わる。インターネットや外部 API に出るには、connector のサブネットから NAT Gateway(IPv6 なら egress-only IGW)への経路が必要。@zaru が「ここのコスト削減は難しそう」と書いているのはこの点。業務アプリは VPC 内のリソースを使うことが多いので、実質 NAT 代がかかる
- 入口は閉じられない。エンドポイントのドメインは常にインターネットから届き、PrivateLink のインターフェイスエンドポイントは使えない。
IamAuthで呼べる人を絞る、CloudFront + WAF を前に置いて直接アクセスを拒否する、などアプリ層・認証で守る - connector を使えるのは
HomeRegionエンドポイントだけ(MultiRegion/PerRegionは不可) - connector を付けない場合の送信元 IP は固定でなく、許可リストには使えない。固定 IP が要るなら connector + NAT
- WebSocket は使えない(片方向なら SSE)。CORS ヘッダーは Lambda が付けないので、アプリか前段で返す