AWS Lambda
개발자 가이드

Amazon VPC에서 리소스에 액세스하도록 Lambda 함수 구성

사용자는 본인의 계정에서 VPC(Virtual Private Cloud)의 프라이빗 서브넷에 연결되도록 함수를 구성할 수 있습니다. Amazon Virtual Private Cloud(Amazon VPC)를 사용하여 데이터베이스, 캐시 인스턴스, 내부 서비스 등과 같은 리소스에 대해 프라이빗 네트워크를 생성하십시오. 함수를 VPC에 연결하여 실행 중 프라이빗에 리소스에 액세스합니다.

AWS Lambda는 기본적으로 VPC 내에서 함수 코드를 안전하게 실행합니다. 하지만 Lambda 함수를 프라이빗 VPC 내부의 리소스에 액세스할 수 있게 하려면 프라이빗 서브넷 ID 및 보안 그룹 ID가 포함된 추가 VPC 관련 구성 정보를 제공해야 합니다. AWS Lambda는 이 정보를 사용하여 함수가 프라이빗 VPC 내의 다른 리소스에 안전하게 연결될 수 있도록 돕는 ENI(탄력적 네트워크 인터페이스)를 설정합니다.

Lambda 함수는 전용 인스턴스 테넌시를 사용하여 VPC에 직접 연결할 수 없습니다. 전용 VPC의 리소스에 연결하려면, 기본 테넌시를 사용하여 두 번째 VPC에 피어로 연결합니다.

실행 역할 및 사용자 권한

VPC로의 연결을 위해서는 함수의 실행 역할에 다음 권한이 주어져야 합니다.

실행 역할 권한

  • ec2:CreateNetworkInterface

  • ec2:DescribeNetworkInterfaces

  • ec2:DeleteNetworkInterface

이러한 권한은 AWSLambdaVPCAccessExecutionRole 관리형 정책에 포함됩니다.

VPC에 연결되도록 함수를 구성하려면 다음 권한이 필요합니다.

사용 권한

  • ec2:DescribeSecurityGroups

  • ec2:DescribeSubnets

  • ec2:DescribeVpcs

Amazon VPC 액세스를 위한 Lambda 함수 구성

Lambda 함수를 만들 때 VpcConfig 파라미터를 사용하여 Lambda 함수 구성에 VPC 정보를 추가합니다(CreateFunction 참조). 또는 기존 Lambda 함수 구성에 추가할 수 있습니다(UpdateFunctionConfiguration 참조). 다음은 예제입니다.

  • create-function CLI 명령은 Lambda 함수를 만들 때 VPC 정보를 제공하기 위해 --vpc-config 파라미터를 지정합니다.

    $ aws lambda create-function --function-name my-function \ --runtime go1.x --handler main --zip-file fileb://main.zip \ --role execution-role-arn \ --vpc-config SubnetIds=comma-separated-vpc-subnet-ids,SecurityGroupIds=comma-separated-security-group-ids
  • update-function-configuration CLI 명령은 기존 Lambda 함수 구성에 VPC 정보를 추가하기 위해 --vpc-config 파라미터를 지정합니다.

    $ aws lambda update-function-configuration --function-name my-function \ --vpc-config SubnetIds=comma-separated-vpc-subnet-ids,SecurityGroupIds=security-group-ids

    Lambda 함수 구성에서 VPC 관련 정보를 제거하려면 다음 예제 CLI 명령에 표시된 대로 서브넷 ID 및 보안 그룹 ID의 빈 목록을 제공하여 UpdateFunctionConfiguration API를 사용합니다.

    $ aws lambda update-function-configuration --function-name my-function \ --vpc-config SubnetIds=[],SecurityGroupIds=[]

Lambda 함수에 VPC 구성을 추가하면 해당 VPC의 리소스에만 액세스할 수 있습니다. Lambda 함수가 VPC 리소스와 퍼블릭 인터넷 모두에 액세스해야 하는 경우 VPC는 해당 VPC 내부에 NAT(Network Address Translation) 인스턴스가 있어야 합니다.

Lambda 함수가 VPC 내에서 실행되도록 구성되면 추가 ENI 시작 페널티가 발생합니다. 즉, 네트워크 리소스에 연결하려고 하면 주소 확인이 지연될 수 있습니다.

Lambda 함수에 대한 인터넷 액세스

AWS Lambda는 Lambda 함수가 VPC 리소스에 액세스할 수 있게 해주는 ENI를 설정하기 위해 사용자가 제공한 VPC 정보를 사용합니다. 각 ENI에는 지정한 서브넷 내의 IP 주소 범위에서 프라이빗 IP 주소가 할당됩니다. VPC에 연결된 함수에는 기본적으로 퍼블릭 IP 주소나 인터넷 액세스 권한이 없습니다.

참고

일부 서비스에서는 VPC 엔드포인트를 제공합니다. VPC 엔드포인트를 사용하면 VPC 내에서 인터넷 액세스 없이 AWS 서비스에 연결할 수 있습니다.

프라이빗 서브넷에서의 인터넷 액세스에는 NAT(Network Address Translation)가 필요합니다. 사용자는 본인의 VPC에 NAT 게이트웨이 또는 NAT 인스턴스를 추가하여 함수에 인터넷 액세스 권한을 부여할 수 있습니다. 인터넷 게이트웨이는 퍼블릭 IP 주소가 필요하므로 작동하지 않습니다. 자세한 내용은 Amazon VPC 사용 설명서에서 NAT 게이트웨이를 참조하십시오.

VPC 활성화 Lambda 함수 설정에 대한 지침

Lambda 함수는 처리하는 이벤트 수에 따라 자동으로 조정됩니다. 다음은 조정 동작을 지원하기 위해 VPC 활성화 함수를 설정하기 위한 일반 지침입니다.

  • Lambda 함수가 VPC에 액세스하는 경우 VPC에 Lambda 함수의 확장 요구 사항을 지원할 수 있는 충분한 ENI 용량이 있는지 확인해야 합니다. 다음 공식을 사용하여 ENI 필요 용량을 대략적으로 확인할 수 있습니다.

    Projected peak concurrent executions * (Memory in GB / 3GB)

    여기서 각 항목은 다음과 같습니다.

    • 예상 피크 동시성 실행 – 함수가 지원해야 하는 동시 실행의 수입니다.

    • 메모리 – Lambda 함수에 대해 구성된 메모리의 양입니다.

  • 지정한 서브넷에는 ENI 수와 일치하는 충분한 IP 주소가 있어야 합니다.

    또한 Lambda 함수 구성에서 각 가용 영역에 하나 이상의 서브넷을 지정하는 것이 좋습니다. 각 가용 영역에서 서브넷을 지정하면 중단되거나 IP 주소가 부족한 경우 Lambda 함수가 다른 가용 영역에서 실행될 수 있습니다.

VPC에 충분한 ENI 또는 서브넷 IP가 없는 경우, 요청이 늘어나도 Lambda 함수가 확장되지 않으며 EC2ThrottledException 등 EC2 오류 유형의 호출 오류가 증가합니다. Amazon VPC는 ENI 생성에 제한을 적용합니다. 지원 센터 콘솔에서 이 제한에 대한 증가를 요청할 수 있습니다.