Lambda の VPC 設定とネットワーク構成完全ガイド(Hyperplane ENI・NAT・サブネット設計)
Lambda を VPC に接続する仕組みを Hyperplane ENI・サブネット選択・セキュリティグループ・NAT Gateway 経由の外部通信まで体系的に解説。コールドスタートへの影響、最低 2 AZ 設計、VPC Endpoint との使い分け、IAM 権限まで実務と試験の両面で押さえる。
Lambda は本来「VPC の外」で動くサーバーレス。VPC 内のリソース(RDS・ElastiCache・社内 API)にアクセスしたいときだけ、Hyperplane ENI を介して VPC に「片足を入れる」構成を取る。
1. 概要(端的に)
Lambda は既定では AWS が管理する VPC の外 で実行され、その状態でもインターネット越しのパブリック API(S3 / DynamoDB / 外部サービス)には自由にアクセスできる。一方で **VPC 内のプライベートリソース(RDS・ElastiCache・オンプレ VPN 経由のサーバー)**に到達するには、Lambda 関数を VPC に「アタッチ」する必要がある。
このアタッチを支える仕組みが Hyperplane ENI(マネージドな共有 ENI)。2019 年のアーキテクチャ刷新により、ENI は関数の 作成・VPC 設定更新のタイミングで前もって生成され、コールドスタート時にネットワーク準備で待たされる旧来の問題は解消された。
2. 何ができるか
Lambda を VPC に接続すると、以下のような VPC 内リソースへの直接アクセスが可能になる。
- Amazon RDS / Aurora(プライベートサブネット) に直接接続
- ElastiCache(Redis / Memcached) にキャッシュアクセス
- VPC 内の社内 API(ALB / NLB 経由)へリクエスト
- AWS Direct Connect / Site-to-Site VPN 経由のオンプレサーバーへ到達
- VPC Endpoint を介した S3 / DynamoDB へのプライベート通信
- 特定の固定 IP からの外向き通信(NAT Gateway + EIP で送信元 IP を固定)
- VPC Lattice 経由のサービスメッシュ統合
逆に、Lambda 関数を VPC に入れた瞬間、デフォルトのインターネット経路は失われる。インターネット越しの API(外部 SaaS・他社 API)を引き続き呼び出したい場合は、NAT Gateway を経由する経路を別途用意する必要がある。
3. 特徴
| 観点 | 仕様 |
|---|---|
| ENI 種別 | Hyperplane ENI(AWS マネージド、ユーザーには見えない) |
| ENI 紐付け単位 | security-group : subnet の組み合わせごとに 1 ENI を共有 |
| 同時接続数 | 1 ENI あたり 最大 65,000 接続/ポート(超えると自動スケール) |
| 作成タイミング | 関数作成時 / VPC 設定変更時(最大 90 秒程度) |
| コールドスタート影響 | 2019 年以降は VPC 関数も非 VPC 関数とほぼ同等の起動時間 |
| インターネット出口 | NAT Gateway もしくは NAT インスタンスが必要(IGW のみでは不可) |
| IAM 必須権限 | AWSLambdaVPCAccessExecutionRole(ENI 作成・削除・記述) |
| 対応 AZ 数 | 推奨:最低 2 AZ のサブネットを指定 |
| IPv6 | デュアルスタックサブネットおよび関数の IPv6 有効化で対応 |
VPC アタッチありとなしの比較
| 評価項目 | VPC アタッチあり | VPC アタッチなし(既定) 推奨 |
|---|---|---|
| 実行環境の場所 | 指定 VPC のサブネット内 | AWS マネージド VPC(不可視) |
| 到達先 | VPC 内 + NAT 経由でインターネット | インターネットの全パブリック API |
| コールドスタート | Hyperplane で大幅改善(ほぼ同等) | 最速 |
| 料金(経路) | NAT Gateway 料金が乗る場合あり | なし |
| IP 固定 | NAT Gateway + EIP で可 | 不可(実行ごとに変動) |
| IAM 権限 | AWSLambdaVPCAccessExecutionRole 必須 | 基本ロールのみ |
| ユースケース | RDS/ElastiCache/オンプレ接続 | API Gateway, S3, DynamoDB 中心の処理 |
4. 仕組み
4-1. Hyperplane ENI の役割
Hyperplane ENI は、Lambda 実行環境と VPC を結ぶ「共有の入口」。
security-group : subnet組み合わせ単位で 1 つ作成される- 同じ組み合わせを使う複数の Lambda 関数で 共有される(関数ごとに ENI が増えない)
- 1 ENI で 最大 65,000 接続/ポートをさばき、超えると自動でスケールアウト
- 実行環境は ENI へ ネットワークトンネルを張って通信するため、起動時の ENI 生成待ちが不要
[Lambda 実行環境 #1]──┐
[Lambda 実行環境 #2]──┼─→ Hyperplane ENI ─→ サブネット ─→ VPC 内リソース
[Lambda 実行環境 #3]──┘ (SG:Subnet 単位で共有)
4-2. ENI が作られるタイミング
| イベント | ENI への影響 |
|---|---|
| 関数を VPC に新規アタッチ | 該当 SG:Subnet 組み合わせの ENI を作成(最大 90 秒) |
| 既存関数の VPC 設定を変更 | 旧 ENI 削除 → 新 ENI 作成 |
| 関数を呼び出した瞬間 | ENI 作成は発生しない(事前作成済み) |
| 関数を VPC からデタッチ | ENI は遅延削除(数十分〜数時間) |
ポイント:旧アーキテクチャ(2019 年以前)はコールドスタートのたびに ENI を関数のアタッチ・デタッチしていたため秒〜数十秒の遅延が発生したが、Hyperplane 方式では事前作成・共有のため コールドスタートのネットワーク要因はほぼ消えた。
4-3. サブネット選択ルール
- 最低 2 AZ にまたがるサブネットを指定(推奨は 3 AZ):1 AZ 障害時の継続実行を担保
- 指定したサブネット内のどれで起動するかは AWS が決定:明示的な制御はできない
- サブネットの IP 空間が枯渇すると Lambda がスケール不能:
/27(30 IP)等の狭いサブネットは危険、/24以上を推奨 - VPC 内のサブネットは「プライベートサブネット」を使う:Lambda 自体がパブリック IP を持てないため、パブリックサブネットに入れても意味がない
4-4. セキュリティグループの設計
Lambda 用 SG は アウトバウンドのみを制御するのが基本(Lambda は呼び出される側ではないため、インバウンドは無関係)。
- 例:「Lambda → RDS(5432)」「Lambda → ElastiCache(6379)」「Lambda → 外部 HTTPS(443)」のみ許可
- 接続先(RDS の SG 等)には Lambda SG からのインバウンドを許可するルールを書く(IP ではなく SG 参照で書くのが定石)
4-5. インターネット出口の作り方
Lambda はパブリック IP を持てない(EIP 割当不可)ため、VPC 内から外部 HTTPS API を叩くには次のいずれかが必要。
| 構成 | 用途 | コスト |
|---|---|---|
| プライベートサブネット → NAT Gateway → IGW | 一般的なインターネット出口 | NAT Gateway 時間 + データ処理料金 |
| プライベートサブネット → VPC Endpoint | S3 / DynamoDB / その他 AWS サービス専用 | Interface 型のみ時間課金(Gateway 型は無料) |
| NAT Gateway + EIP | 送信元 IP を固定して API ホワイトリスト対応 | 上記 + EIP 料金 |
| IPv6 + Egress-only IGW | IPv6 アウトバウンド限定 | EIGW 自体は無料 |
5. ユースケース
ユースケース 1:API Gateway → Lambda → RDS の典型構成
API Gateway 経由のリクエストを VPC 内 Lambda が受け、プライベートサブネットの RDS に SQL を発行する。最も頻出のパターン。
クライアント → API Gateway → Lambda(VPC 内)→ RDS(Multi-AZ)
↓(必要なら)
NAT Gateway → 外部 API
ユースケース 2:固定送信元 IP を要求する外部 API への中継
取引先 SaaS が「IP ホワイトリスト方式」しか提供しないとき、Lambda → NAT Gateway → EIP の経路で 送信元 IP を固定し、ホワイトリストに 1 つだけ EIP を登録する。
ユースケース 3:オンプレミスへの定期データ同期
Site-to-Site VPN または Direct Connect で繋いだオンプレサーバーに対し、EventBridge スケジュールで Lambda を起動して同期ジョブを走らせる。VPN の宛先はプライベート IP のため、VPC アタッチが必須。
ユースケース 4:ElastiCache を介したセッション共有
API Gateway + Lambda のステートレスな構成にセッションを持たせるため、ElastiCache Redis を VPC 内に配置。Lambda 同士で同じ ElastiCache を参照する。
ユースケース 5:VPC Lattice 経由のサービスメッシュ
VPC Lattice の Target Group として Lambda 関数を登録し、他 VPC・他アカウントのサービスから呼び出せるようにする。サービスディスカバリと認可を一元化できる。
6. メリット・デメリット
7. ベストプラクティス
- 本当に VPC が必要かを最初に問う:DynamoDB / S3 / SQS など AWS マネージドサービスのみが宛先なら、VPC アタッチせずに VPC Endpoint も不要。
- 最低 2 AZ・できれば 3 AZ にサブネットを配置:単一 AZ では AZ 障害時に関数全停止のリスク。
- サブネット CIDR は十分大きく(
/24以上推奨):Hyperplane 共有とはいえ、極端なスケール時には IP 枯渇が起こりうる。 - Lambda 専用サブネットを切る:他リソースとの IP 競合を避け、ENI のスケールを予測しやすくする。
- セキュリティグループは「最小権限・SG 参照」で記述:宛先 SG を直接指定し、IP レンジでの開放を避ける。
- NAT Gateway はリージョン共有が基本:Lambda 専用に NAT を持つのではなく、既存の共有 NAT を再利用してコスト最適化。
- S3 / DynamoDB は VPC Endpoint で迂回:NAT 経由のデータ転送費を削減できる。
- IAM ロールには
AWSLambdaVPCAccessExecutionRoleを必ず付与:これがないと ENI 作成権限不足で関数が起動できない。 - VPC Flow Logs を有効化:Lambda の通信が想定通りの宛先・ポートに飛んでいるかを後追い検証できる。
8. 関連用語
- AWS Lambda — VPC アタッチの主体
- Amazon VPC — Lambda が接続する仮想ネットワーク
- VPC サブネット — 関数が配置される最小単位
- Security Group — Lambda のアウトバウンド通信制御
- Network ACL — サブネット単位のステートレス制御
- NAT Gateway — Lambda の外部 HTTPS 通信に必須
- VPC Endpoint — S3 / DynamoDB へプライベート経路で接続
- PrivateLink — 他 VPC のサービスにプライベート接続
- VPC Flow Logs — ENI 単位の通信ログ取得
- Lambda 同時実行数 — ENI スケール条件と一緒に押さえる
- IAM ロール — 実行ロールに VPC アクセス権限を付与
- Amazon RDS — Lambda VPC 接続の代表的な宛先
- ElastiCache Redis — セッション共有の宛先
9. 関連サイト
AWS 公式
- Lambda 関数を VPC に接続する(公式ユーザーガイド)
- VPC 接続 Lambda にインターネットアクセスを与える方法
- VPC Lattice と AWS Lambda の併用
- AWS Blog:Announcing improved VPC networking for AWS Lambda functions
- AWS re:Post:Lambda 関数にインターネットアクセスを与える
- AWS Prescriptive Guidance:固定送信 IP の構成パターン
参考記事
- Classmethod:インターネットアクセス可能な VPC Lambda を作成してみた
- Classmethod:VPC Lambda で複数サブネット指定時の起動先を確認
- TechHarmony:VPC Lambda を実現している AWS 内の裏側と設計の心得三箇条
- Qiita:VPC 内の Lambda からインターネットにアクセスする
🎓 試験での出題傾向
| 試験 | 重要度 | 主な出題パターン |
|---|---|---|
| CLF | 低 | Lambda の概念把握レベル、VPC は名前のみ |
| SAA | 高 | 「Lambda が RDS にアクセスできない」のトラブル原因、サブネット選択、NAT Gateway の必要性、IP 固定要件 |
| DVA | 高 | VPC アタッチ時の権限不足エラー、ENI 作成の理解、コールドスタック改善知識 |
| SOA | 中 | サブネット IP 枯渇による関数スケール失敗、Flow Logs での通信監視 |
特に SAA では次の典型問題に注意:
- 「Lambda が VPC 内 RDS に接続できない」 → 実行ロールに
AWSLambdaVPCAccessExecutionRoleがない / SG の許可不足 / サブネット選択ミス - 「Lambda の送信元 IP を固定したい」 → プライベートサブネット + NAT Gateway + EIP の構成
- 「Lambda を VPC に入れたらインターネットに出られなくなった」 → IGW のみではダメ、NAT Gateway 経由が必要
- 「Lambda の S3 アクセスを VPC 内に閉じたい」 → S3 Gateway 型 VPC Endpoint を作成
- 「コールドスタートが遅い」古い前提の出題 → 2019 年以降は Hyperplane ENI でほぼ解消されている