AWS Lambda
개발자 가이드

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

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

Lambda은 1분 정도 걸릴 수 있는 프로세스에서 함수의 VPC 구성에 보안 그룹 및 서브넷의 각 조합에 대한 탄력적 네트워크 인터페이스를 생성합니다. 동일한 서브넷에 연결된 여러 함수가 네트워크 인터페이스를 공유하므로, 이미 Lambda 관리형 네트워크 인터페이스가 있는 서브넷에 추가 함수를 연결하는 것이 훨씬 빠릅니다. 함수가 많거나 사용 중인 경우 Lambda은 추가 네트워크 인터페이스를 생성할 수 있습니다.

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

실행 역할 및 사용자 권한

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

실행 역할 권한

  • ec2:CreateNetworkInterface

  • ec2:DescribeNetworkInterfaces

  • ec2:DeleteNetworkInterface

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

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

사용 권한

  • ec2:DescribeSecurityGroups

  • ec2:DescribeSubnets

  • ec2:DescribeVpcs

Lambda API를 사용한 Amazon VPC 액세스 구성

생성하는 동안 VPC에 함수를 연결하려면 프라이빗 서브넷 ID 및 보안 그룹 목록과 함께 vpc-config 옵션을 사용하십시오.

$ aws lambda create-function --function-name my-function \ --runtime nodejs10.x --handler index.js --zip-file fileb://function.zip \ --role arn:aws:iam::123456789012:role/lambda-role \ --vpc-config SubnetIds=subnet-071f712345678e7c8,subnet-07fd123456788a036,SecurityGroupIds=sg-085912345678492fb

기존 함수의 경우 update-function-configuration 명령과 함께 동일한 옵션을 사용하십시오.

$ aws lambda update-function-configuration --function-name my-function \ --vpc-config SubnetIds=subnet-071f712345678e7c8,subnet-07fd123456788a036,SecurityGroupIds=sg-085912345678492fb

VPC에서 함수를 연결 해제하려면 서브넷 및 보안 그룹의 빈 목록을 사용하여 함수 구성을 업데이트하십시오.

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

이러한 명령은 다음 API를 사용합니다.

VPC 연결 함수의 인터넷 및 서비스 액세스

기본적으로 Lambda은 AWS 서비스 액세스 및 인터넷을 통해 안전한 VPC에서 함수를 실행합니다. 계정에서 VPC에 함수를 연결할 때 VPC가 액세스 권한을 제공하지 않는 경우 인터넷에 액세스할 수 없습니다.

참고

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

프라이빗 서브넷에서의 인터넷 액세스에는 NAT(Network Address Translation)가 필요합니다. 함수에 인터넷 액세스 권한을 부여하려면 아웃바운드 트래픽을 퍼블릭 서브넷의 NAT 게이트웨이로 라우팅합니다. NAT 게이트웨이는 퍼블릭 IP 주소가 있으므로 VPC의 인터넷 게이트웨이를 통해 인터넷에 연결할 수 있습니다. 자세한 내용은 Amazon VPC 사용 설명서에서 NAT 게이트웨이를 참조하십시오.

샘플 VPC 구성

이 설명서의 GitHub 리포지토리에서 Lambda 함수에 사용할 수 있는 VPC 구성에 대한 샘플 AWS CloudFormation 템플릿을 사용할 수 있습니다. 다음과 같은 두 개의 템플릿이 있습니다.

  • vpc-private.yaml – Amazon Simple Storage Service 및 Amazon DynamoDB에 대한 두 개의 프라이빗 서브넷과 VPC 엔드포인트가 있는 VPC입니다. 이 템플릿을 사용하면 인터넷 액세스가 필요하지 않은 함수에 대한 VPC를 만들 수 있습니다. 이 구성은 AWS SDK에서의 Amazon S3 및 DynamoDB 사용을 지원하며, 로컬 네트워크 연결을 통해 동일한 VPC에 있는 데이터베이스 리소스에 대한 액세스를 지원합니다.

  • vpc-privatepublic.yaml – 두 개의 프라이빗 서브넷, VPC 엔드포인트, NAT 게이트웨이가 포함된 퍼블릭 서브넷 및 인터넷 게이트웨이가 있는 VPC입니다. 프라이빗 서브넷의 함수에서 발생하는 인터넷 바인딩된 트래픽은 라우팅 테이블을 통해 NAT 게이트웨이로 라우팅됩니다.

템플릿을 사용하여 VPC를 만들려면 AWS CloudFormation 콘솔에서 스택 생성을 선택하고 지침에 따르십시오.