본문으로 바로가기

[Lambda] Lambda의 네트워크 모드 (no-VPC, VPC)

category AWS/컴퓨팅 2023. 6. 11. 13:31

Contents

    Lambda의 네트워크

    기본적으로 Lambda는 EC2와는 다르게 VPC 내부의 리소스가 아니다.

    • Lambda는 AWS에서 관리되는 Lambda Service VPC라는 전용 VPC에서 실행된다. (고객은 이를 보지 못함.)

     

    no-VPC Mode

    일반적으로 모든 AWS 서비스가 다른 AWS서비스와 통신을 하기 위해서는 아래의 조건을 만족해야 한다.

    1. 종단 간 네트워크 연결
    2. 충분한 IAM 권한.

    Lambda Service VPC에 있는 Lambda는 위에서 언급한 1번 항목인 VPC에 대한 네트워크 연결이 없기 때문에 VPC 내에서만 사용 가능한 리소스에 액세스할 수 없다. (Elasticache, RDS 등)

    그러나 퍼블릭 서비스(S3, SNS, SQS, Kinesis 등)에는 1번 항목을 만족하기 때문에 충분한 IAM 권한만 있다면 액세스 할 수 있다.

    • 이렇게 Customer VPC에서 실행되지 않는 Lambda를 no-VPC mode라고 한다.

     

    VPC Mode

    1. Lambda를 VPC에 연결하려면 사용할 VPC, 서브넷, 보안그룹을 선택한다.
      • 이 때 Lambda 리소스를 재배치하지 않는다. (다운타임 없이 즉시 적용됨.)
    2. 위 그림에서 보이듯이 Lambda Service VPC 내부에 VPC간의 NAT를 생성한다.
      • 이는 내부적으로 작동한다.
    3. Lambda Service VPC의 NAT는 Customer VPC에 있는 ENI에 연결된다.
    4. 1번에서 선택한 보안그룹을 해당 ENI에 적용한다.

     

    • 이러한 ENI를 관리하기 위해서는 Lambda에 필요한 IAM 권한(아래의 권한)을 명시적으로 부여해야 한다.
      • ec2:CreateNetworkInterface
      • ec2:DescribeNetworkInterfaces
      • ec2:DeleteNetworkInterface
    아니면 필요한 모든 권한이 포함된 AWS 관리형 정책인 AWSLambdaVPCAccessExecutionRole 를 사용해도 된다.
    • 주어진 서브넷의 이 ENI는 해당 기능이 동일한 보안 그룹 집합을 갖도록 구성되어 있는 한 여러 기능의 여러 람다 인스턴스에서 공유된다.
    • 만약, 연결된 Lambda 인스턴스의 네트워크 사용량이 특정 수준을 초과하게 된다면 Lambda는 증가된 트래픽을 수용할 수 있도록 ENI를 추가로 생성한다.

     

    Reference