AWS Lambda
개발자 가이드

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

일반적으로 퍼블릭 인터넷을 통해 액세스할 수 없도록 Amazon Virtual Private Cloud(Amazon VPC) 내에 리소스를 생성합니다. 이러한 리소스는 Amazon Redshift 데이터 웨어하우스, Amazon ElastiCache 클러스터 또는 Amazon RDS 인스턴스와 같은 AWS 서비스 리소스일 수 있습니다. 또한 자체 EC2 인스턴스에서 실행되는 자체 서비스일 수도 있습니다. 기본적으로 VPC 내의 리소스는 함수 내에서 액세스할 수 없습니다.

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

AWS Lambda는 전용 테넌시 VPC 내 리소스 연결을 지원하지 않습니다. 자세한 내용은 전용 VPC를 참조하십시오.

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

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

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

    $ aws lambda create-function \ --function-name ExampleFunction \ --runtime go1.x \ --role execution-role-arn \ --zip-file fileb://path/app.zip \ --handler app.handler \ --vpc-config SubnetIds=comma-separated-vpc-subnet-ids,SecurityGroupIds=comma-separated-security-group-ids \ --memory-size 1024

    참고

    Lambda 함수 실행 역할에는 ENI를 생성, 설명 및 삭제할 수 있는 권한이 있어야 합니다. AWS Lambda는 역할을 만들 때 사용할 수 있는 필수 EC2 작업(ec2:CreateNetworkInterface, ec2:DescribeNetworkInterfacesec2:DeleteNetworkInterface)에 대한 권한이 있는 AWSLambdaVPCAccessExecutionRole 권한 정책을 제공합니다. IAM 콘솔에서 정책을 검토할 수 있습니다. 함수 실행 직후에 이 역할을 삭제하지 마십시오. 함수가 실행될 때와 ENI 삭제 사이에 지연이 있습니다. 함수를 실행한 직후에 역할을 삭제하면 ENI를 삭제해야 합니다.

  • update-function-configuration CLI 명령은 기존 Lambda 함수 구성에 VPC 정보를 추가하기 위해 --vpc-config 파라미터를 지정합니다.

    $ aws lambda update-function-configuration \ --function-name ExampleFunction \ --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 ExampleFunction \ --vpc-config SubnetIds=[],SecurityGroupIds=[]

다음과 같은 추가 고려 사항에 유의합니다.

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

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

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

AWS Lambda는 Lambda 함수가 VPC 리소스에 액세스할 수 있게 해주는 ENI를 설정하기 위해 사용자가 제공한 VPC 정보를 사용합니다. 각 ENI에는 지정한 서브넷 내의 IP 주소 범위에서 프라이빗 IP 주소가 할당되지만 퍼블릭 IP 주소는 할당되지 않습니다. 따라서 Lambda 함수에 인터넷 액세스가 필요한 경우(예: NAT 엔드포인트가 없는 AWS 서비스에 액세스하는 경우) VPC 내부에 NAT 인스턴스를 구성하거나 Amazon VPC NAT 게이트웨이를 사용할 수 있습니다. 자세한 내용은Amazon VPC 사용 설명서에서 NAT 게이트웨이 를 참조하십시오. VPC에 연결된 인터넷 게이트웨이는 퍼블릭 IP 주소를 필요로 하기 때문에 사용할 수 없습니다.

중요

Lambda 함수에 인터넷 액세스가 필요한 경우 인터넷 액세스 없이 퍼블릭 서브넷이나 프라이빗 서브넷에 연결하지 마십시오. 대신 NAT 인스턴스 또는 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 주소가 부족한 경우 함수가 다른 가용 영역에서 실행될 수 있습니다.

VPC에 충분한 ENI 또는 서브넷 IP가 없는 경우, 요청이 늘어나도 Lambda 함수가 확장되지 않으며 EC2ThrottledException 등 EC2 오류 유형의 호출 오류가 증가합니다. 비동기식 호출의 경우 해당하는 CloudWatch Logs 없이 오류가 증가하면 오류 응답을 얻기 위해 콘솔에서 Lambda 함수를 동기식으로 호출하십시오.