← AWSサービスの内部原理 コース
25. VPC接続の仕組み — Hyperplane ENIという共有の出入口
Lambda関数はあなたのVPCに引っ越すのではなく、共有の出入口「Hyperplane ENI」を通じてあなたのVPCへトンネルします。その一本の通路が、スケール・コールドスタート・インターネット到達性のすべてを説明します。
① 出発点 — 関数は「あなたのVPC」に引っ越さない
Lambda管理VPC関数の実行環境は常にここに居る
私たちからは見えず自動運用VPC接続 = 通路を1本引く
Hyperplane ENIあなたのサブネット内に作られる出入口
あなたのVPCVPC内のリソースに到達できる
- ENI = そのネットワークに属する1枚のネットワークカード(IPアドレス+接続の出入口)
- 「あなたのVPCに配置する」は比喩。関数の実体はLambda側に居たまま
Lambda関数はVPC設定の有無に関わらず、常にLambda管理VPCの中で動き続けます。VPC接続とは、2つの世界のあいだに通路を1本引く作業で、その入口の実体がHyperplane ENIです。
② 共有の出入口 — ENIは「サブネット×SG」の組ごとに1つ
関数A実行環境 ×数百
関数B実行環境 ×数千
関数C実行環境 ×増減
同じ サブネット×SG の組なら既存を再利用
共有 Hyperplane ENI ×11つの出入口の裏側に束ねる
トンネル
あなたのVPC
- 初めての接続時にLambdaが指定の組に対してENIを作成
- 同じアカウント・同じ組で別の関数を接続 → 新規作成せず再利用
- 出入口が実行環境の数に比例して増えないことがこの方式の肝
ENIは関数ごとでも実行環境ごとでもなく、サブネットとセキュリティグループの組み合わせごとに1つだけ作って共有します。実行環境が何百何千に増減しても、出入口の数はそれに比例しません。
③ なぜ共有で足りるか — 65,000接続というポート空間
多数の実行環境の通信
多対1で集約(NATと同じ発想)
ENI 1枚最大65,000接続(ポート空間)
超えそうならLambdaがENIを自動増設対比
旧方式実行環境ごとにENIを作成
スケールのたびにENI作成がボトルネック → コールドスタート悪化共有ENI方式作成コストを初回一度きりに畳み込む
- 「環境が増えるたびに新しい出入口を作る」コストが消えたことが改善の本質
1つのENIは最大65,000の接続を捌けます。NATが多対1の出入口とポート空間で多数の通信を集約したのと同じ発想で、有限だが十分に広い資源を多数の実行環境で共有します。
④ 初回コストとライフサイクル — Pending → Active → Inactive
VPC接続を設定ENIの工事が始まる
ENI作成中(数分かかることも)
Pending呼び出せない
ENIの準備完了
Active呼び出し可能
14日間アイドル → 未使用ENIを回収
Inactive次の呼び出しは一度失敗 → 再びPendingへ(ENI再確保待ち)
- Lambdaは負荷分散やヘルスチェックのためENIを削除・再作成することがある
- ENIを永続の前提で設計しない
初回一度きりの工事コストは残ります。ENI作成が終わるまで関数はPendingで呼び出せず、これには数分かかることがあります。出入口は永続前提ではなく、14日アイドルで回収されます。
⑤ 接続の代償 — インターネット到達性を失い、NATを自分で用意する
接続前Lambda管理VPCの出口からインターネットへ
接続後出入口があなたのVPCのHyperplane ENIに切替
以降の経路はあなたのVPCのルーティングに従う
プライベートサブネットそのままでは外に出られない
あなたのVPCに用意する
NATゲートウェイ多対1の出入口で外向きに変換
インターネット
- 到達性を失うのは意地悪ではなく必然(出入口の切替による帰結)
- 既習のNATの仕組みを、今度は自分のVPCで用意する番になった
VPCに接続した瞬間、出入口があなたのVPC内のENIに切り替わるため、経路もあなたのVPCのルーティングに従い、既定のインターネット到達性を失います。外に出したいならNATゲートウェイを自分で用意します。