AWS LambdaとVPC接続の仕組み
AWS LambdaがVPC内のリソース(RDSなど)にアクセスする際、「VPC設定」を行いますが、この設定がネットワーク通信にどのような影響を与えるかは非常に重要です。
このドキュメントでは、その鍵となる「ENI」の役割と、VPC設定を行ったLambda(通称: VPC Lambda)のネットワーク的な振る舞いについて解説します。
1. ENIとは?
ENI (Elastic Network Interface) を理解する最も簡単な方法は、それを 「仮想的なLANカード(またはネットワークの接続口)」 と考えることです。
- 物理的なサーバーがLANカードを持ってネットワークに接続するように、AWSのリソース(EC2やLambda)もVPCというネットワークに接続するためにENIを使用します。
- ENIには、通信に必要な以下の設定が紐づいています。
- プライベートIPアドレス(VPCのサブネットから割り当て)
- セキュリティグループ(通信を制御するファイアウォール)
- MACアドレス
LambdaにVPC設定を行うとは、このENIをVPC内に作成し、Lambda関数がそこへ接続することを意味します。
2. 理解の鍵:「VPCの内側」と「VPCの外側」
AWSのネットワークを理解するには、大きく分けて2つの「空間」が存在することを意識するのが重要です。
🌎 VPCの外側 (AWS Public Cloud)
AWSが管理する広大なパブリックネットワーク空間です。
- 代表的なリソース: S3, DynamoDB, SQS, SNS, Cognito, API Gatewayなど。
- VPC設定なしのLambdaもここで実行されます。
- これらのサービスは、インターネット経A経由でAPIを呼び出して利用するのが基本です。
🔒 VPCの内側 (ユーザのVPC)
ユーザ個人が、論理的に隔離し自由に設計・管理できるプライベートネットワーク空間です。
- 代表的なリソース: EC2, RDS, ElastiCacheなど。
- ここに配置されたリソースは、プライベートIPアドレスを持ち、外部から隔離されています。
3. VPC Lambdaの正体とは?
VPC設定を行ったLambda(VPC Lambda)は、ネットワークの観点から非常に特殊な振る舞いをします。
- 配置場所は変わらない: Lambda関数を実行する基盤(実行環境)は、「VPCの外側」に配置されたままです。関数自体がVPC内に「引っ越す」わけではありません。
- ネットワークの出口が変わる: 最大のポイントは、VPC設定を行うと、そのLambda関数からのすべてのアウトバウンド(外向き)通信が、VPC内に作成されたENIを経由するよう強制される点です。
VPC設定なしのLambdaは「VPCの外側」から直接インターネットに出ていきますが、VPC Lambdaは「VPCの内側」にあるENIという出口から通信を開始します。
この結果、VPC Lambdaは、ネットワーク的には「ENIが配置されたサブネットに属している」EC2インスタンスと全く同じように振る舞います。
4. VPC Lambdaの通信パターン
VPC LambdaがプライベートなRDSにアクセスしつつ、同時にVPCの外側にあるS3やCognitoなどにもアクセスしたい場合、VPCのルール(ルートテーブル)に従う必要があります。
主な解決策は以下の3パターンです。
パターン1: NAT Gateway経由
-
構成: VPC LambdaのENIをプライベートサブネットに配置し、そのサブネットのルートテーブルでインターネット通信(
0.0.0.0/0)をNAT Gatewayに向けます。 -
特徴:
- VPC Lambdaは、ENI → NAT Gateway → インターネット という経路でS3や外部APIにアクセスします。
- VPC内のRDSにもプライベートIPでアクセス可能です。
- デメリット: NAT Gatewayの利用料金とデータ処理料金が発生します。
パターン2: VPCエンドポイント経由
- 構成: Lambdaを配置するVPCに、S3, DynamoDB, Secrets Managerなどのサービスに対応したVPCエンドポイントを作成します。
-
特徴:
- VPCエンドポイントは、VPCとAWSサービス(S3など)をAWS内部ネットワークで直接接続する出入り口です。
- 通信がインターネットに出ないため、セキュアで高速です。
- NAT Gatewayを経由しないため、通信コストを削減できます。
- 注意点: すべてのサービスがVPCエンドポイントに対応しているわけではありません(ただし主要なものは対応済)。Gateway型エンドポイント(S3, DynamoDB)は無料、それ以外はInterface型エンドポイントであり有料です。
パターン3: Lambdaの役割分担(アーキテクチャ)
-
構成: ネットワーク構成ではなく、アーキテクチャ(設計)で解決する方法です。
- VPC外Lambda (A): S3やCognitoなど、パブリックリソースの処理を担当します。
- (A) は処理結果を、SQSキューやSNSトピックに送信します。
- VPC内Lambda (B): SQSキューなどをトリガーに起動し、受け取った結果をVPC内のRDSに書き込みます。
-
特徴:
- 各Lambdaの役割(インターネット担当とプライベート担当)が明確に分離されます。
- SQSなどを挟むことで、処理が非同期化され、システム全体の耐障害性が向上します。
- 最もクリーンで推奨される構成の一つです。