テック技報最新号へ →
インフラ

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 は常にインターネットから届く。

@zaru · 2026-10-16
#infra#aws#lambda#serverless#vpc#network

どんなときに使う?

  • 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 内のリソースにつなぐ

  1. egress network connector を作る(aws lambda-core create-network-connector)。サブネットは別 AZ に 2 つ以上、AssociatedComputeResourceTypes は WebFunction、ENI を管理するための operator role を渡す
  2. connector が ACTIVE になったらバージョン番号を控える
  3. Web Function の revision の serviceConfig.egressNetworkConnectorArn に、バージョン付きの ARN(...:network-connector:nc-xxxx:4)を指定して revision を作る
  4. 接続先のセキュリティグループで、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 が付けないので、アプリか前段で返す

出典

X の元の投稿を開く