0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ENI と VPC に関連した Lambda の振る舞いと通信パターン

Posted at

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の役割分担(アーキテクチャ)

  • 構成: ネットワーク構成ではなく、アーキテクチャ(設計)で解決する方法です。
    1. VPC外Lambda (A): S3やCognitoなど、パブリックリソースの処理を担当します。
    2. (A) は処理結果を、SQSキューやSNSトピックに送信します。
    3. VPC内Lambda (B): SQSキューなどをトリガーに起動し、受け取った結果をVPC内のRDSに書き込みます。
  • 特徴:
    • 各Lambdaの役割(インターネット担当とプライベート担当)が明確に分離されます。
    • SQSなどを挟むことで、処理が非同期化され、システム全体の耐障害性が向上します。
    • 最もクリーンで推奨される構成の一つです。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?