전용 VPC에 Lambda 함수를 연결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2019년 7월 30일

AWS Lambda 함수를 전용 Virtual Private Cloud(VPC)의 리소스에 연결하려고 합니다. 어떻게 설정해야 합니까?

간략한 설명

Lambda는 현재 전용 테넌시 VPC에서의 실행을 지원하지 않기 때문에 전용 테넌시 VPC를 Lambda 함수가 포함된 기본 테넌시 VPC로 피어링해야 합니다. Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 테넌시 및 VPC에 대한 자세한 내용은 전용 인스턴스 기본 사항을 참조하십시오.

중요: 이 문서에서는 귀하가 Node.js를 이해하고 있다고 가정하고 Lambda 함수를 생성하는 방법에 대해 설명합니다. 이 솔루션을 사용하려면 Amazon Elastic Compute Cloud(Amazon EC2) 전용 인스턴스를 사용해야 합니다. 단, AWS 계정에 이 인스턴스에 대한 요금이 발생합니다.

해결 방법

VPC 생성 및 구성

1.    Amazon VPC 콘솔에서 VPC를 생성하십시오. 생성이 진행되는 동안 IPv4 CIDR 블록12.0.0.0/16을 입력하십시오. 테넌시에서 기본을 선택합니다.

2.    다른 VPC를 생성하십시오. 생성이 진행되는 동안 IPv4 CIDR 블록11.0.0.0/16을 입력하십시오. 테넌시에서 전용을 선택합니다.

참고: 다른 CIDR 블록을 사용하려면 두 VPC의 블록이 서로 다르고 겹치지 않아야 합니다.

3.    인터넷 게이트웨이를 생성한 다음 전용 테넌시 VPC에 연결하십시오.

참고: 인터넷 게이트웨이는 나중에 연결 테스트에서 생성할 HTTP 서버에 필요합니다. 자세한 내용은 인터넷 액세스 활성화를 참조하십시오.

4.    각 VPC에서 서브넷을 생성하십시오. 기본 테넌시 VPC(나중에 Lambda 함수로 액세스)에 대해 서로 다른 가용 영역에 두 개 이상의 서브넷을 생성하십시오. 이것은 중복성을 위한 가장 좋은 방법이며 이를 통해 Lambda가 사용자의 함수에 고가용성을 제공할 수 있습니다.

참고: VPC에 서브넷을 하나만 생성한 경우 VPC와 동일한 CIDR 블록을 사용할 수 있습니다. 각 VPC에 서브넷이 여러 개인 경우 VPC의 CIDR 블록의 서브넷을 사용하십시오. 자세한 내용은 IPv4의 경우, VPC 및 서브넷 크기 조정을 참조하십시오.

5.    생성한 두 VPC 간에 VPC 피어링 연결을 생성하십시오. 피어링 연결 생성 페이지에서 다음을 수행하십시오.
(선택 사항) 피어링 연결 이름 태그에 VPC 피어링 연결의 이름을 입력하십시오.
VPC(요청자)에서 생성한 기본 테넌시 VPC를 선택하십시오.
계정사용자의 계정 이 선택되어 있는지 확인하십시오.
리전현재 리전이 선택되어 있는지 확인하십시오.
VPC(수락자)에서 생성한 VPC 전용 테넌시를 선택하십시오.
피어링 연결 생성을 선택하십시오.

6.    VPC 피어링 연결을 허용하십시오.

7.    여기에 표시된 대로 새 VPC의 각 라우팅 테이블에 경로를 추가하십시오. 자세한 내용은 라우팅 테이블에 경로 추가 및 라우팅 테이블에서 경로 제거를 참조하십시오.

목표 값이 pcx-...로 시작하는 경우, 피어링 연결을 선택한 다음, 생성한 피어링 연결을 선택하십시오.
목표 값이 igw-...로 시작하는 경우, 인터넷 게이트웨이를 선택한 다음, 생성한 인터넷 게이트웨이를 선택하십시오.

기본 테넌시 VPC:

대상 목표 상태 전파됨
12.0.0.0/16 로컬 활성 아니요
11.0.0.0/16 pcx-1a2b3c4d5e6f7g8h9 활성 아니요

전용 테넌시 VPC:

대상 목표 상태 전파됨
11.0.0.0/16 로컬 활성 아니요
12.0.0.0/16 pcx-1a2b3c4d5e6f7g8h9 활성 아니요
0.0.0.0/0 igw-12345678a90b12c34 활성 아니요

Amazon VPC에 대한 Lambda 실행 역할 생성

참고: Amazon VPC 액세스용 Lambda 실행 역할이 이미 있는 경우 이 섹션을 건너뛰십시오.

1.    AWS Identity and Access Management(IAM) 콘솔의 왼쪽 탐색 창에서 역할을 선택합니다.

2.    역할 창에서 역할 만들기를 선택합니다.

3.    역할 만들기 페이지에서 다음을 수행합니다.
[신뢰할 수 있는 유형의 개체 선택] 섹션에서 [AWS 서비스]를 선택합니다.
이 역할을 사용할 서비스 선택 섹션에서 Lambda를 선택합니다.
다음: 권한을 선택합니다.

4.    권한 정책 연결에서 AWSLambdaVPCAccessExecutionRole을 검색합니다. 해당 이름의 정책을 선택하고, 다음: 태그를 선택합니다.

5.    (선택 사항) 기본 설정에 태그를 추가하십시오.

6.    검토에서 다음을 수행합니다.
[역할 이름]에서 이 Lambda 실행 역할의 이름을 입력합니다. 예를 들어, lambda_vpc_basic_execution과 같습니다.
(선택 사항) [역할 설명]에서 기본 설정에 대한 설명을 편집합니다.
역할 만들기를 선택합니다.

테스트를 위한 새로운 Lambda 생성

Lambda 콘솔을 사용하거나 자체 배포 패키지를 구축 및 업로드하여 사용자 마이그레이션 Lambda 함수를 생성합니다. 다음을 확인하십시오.

  • 기본 테넌시 VPC와 동일한 AWS 리전에 함수를 생성하십시오.
  • 생성한 실행 역할을 연결하십시오(예: lambda_vpc_basic_execution).

다음은 테스트를 위한 Node.js에서 기본 HTTP 인터페이스를 사용하는 몇 가지 예제 함수 코드입니다.

var http = require('http')
     
exports.handler = (event, context, callback) => {
    const options = {
        hostname: event.Host,
        port: event.Port
    }
    
    const response = {};
    
   http.get(options, (res) => {
        response.httpStatus = res.statusCode
        callback(null, response)
    }).on('error', (err) =>{
        callback(null, err.message);
    })
   
};

Lambda 함수를 VPC에 연결

1.    Lambda 콘솔에 있는 구성 창의 네트워크에서 다음을 수행합니다.
Virtual Private Cloud(VPC)에서 생성한 기본 테넌시 VPC를 선택하십시오.
서브넷에서 VPC의 서브넷을 2개 이상 선택하십시오.
보안 그룹에서 보안 그룹을 선택하십시오.
참고: 기본 보안 그룹은 대부분의 활용 사례에 충분합니다. 자세한 내용은 VPC의 보안 그룹을 참조하십시오.

2.    저장을 선택하십시오.

연결 테스트

1.    전용 테넌시 VPC에서 EC2 인스턴스를 시작하십시오. 나중에 연결하려면 설정 중에 할당할 수 있는 퍼블릭 IPv4 주소가 필요합니다. 또는 설치 후 탄력적인 IP 주소를 인스턴스와 연결할 수 있습니다.

중요: 전용 인스턴스로 지원되는 EC2 인스턴스 유형을 선택해야 합니다. 단, AWS 계정에 이 인스턴스에 대한 요금이 발생합니다.

2.    두 VPC의 네트워크 ACL(액세스 제어 목록)이 테스트 중인 포트(80) 및 전용 EC2 인스턴스의 보안 그룹에 대한 트래픽을 허용하는지 확인하십시오.

3.    SSH를 사용하여 EC2 인스턴스에 연결하십시오.

4.    다음 명령을 실행하여 EC2 인스턴스에서 HTTP 서버를 시작하십시오.

# If python version is 2.x:
$ sudo python -m SimpleHTTPServer 80
# If python version is 3.x
$ sudo python -m http.server 80

5.    Lambda 콘솔에서 함수의 테스트 이벤트를 구성하십시오. 이 JSON을 이벤트에 사용하여 yourHost를 EC2 인스턴스의 IP 주소 또는 호스트 이름으로 바꾸십시오.

{
  "Host": "yourHost",
  "Port": 80
}

6.    Lambda 콘솔에서 테스트를 선택하십시오.

7.    다음과 같이 200 응답 코드에 대한 실행 결과의 세부 정보를 점검하여 연결이 성공했는지 확인하십시오.

{
  "statusCode": 200
}

함수 출력이 평균, 최대 및 최소 지연 시간에 대해 0이 아닌 값이 표시되면 VPC 피어링 연결이 성공적으로 설정됩니다.

참고: Lambda 시간이 초과되면 보안 그룹이 올바르게 구성되어 있는지 확인하십시오. ECONNREFUSED 오류가 발생하면 HTTP 서버가 실행 중인지 확인하십시오.