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

5분 분량
0

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

간략한 설명

Lambda는 전용 테넌시 VPC에서 함수를 실행하는 것을 지원하지 않습니다. Lambda 함수를 전용 VPC에 연결하려면 먼저 함수가 포함된 기본 테넌시 VPC에 전용 VPC를 피어링합니다.

이 솔루션을 사용하려면 Amazon Elastic Compute Cloud(Amazon EC2) 전용 인스턴스를 사용해야 합니다. 참고로 이 인스턴스에 대한 AWS 계정에 요금이 발생합니다. Amazon EC2 인스턴스 테넌시 및 VPC에 대한 자세한 내용은 전용 인스턴스 기본 사항을 참조하세요.

해결 방법

참고: 다음 절차를 수행하려면 Node.jsLambda 함수 생성 방법에 대한 이해가 필요합니다.

기본 테넌시 VPC와 전용 테넌시 VPC 생성 및 구성

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

1.    Amazon VPC 콘솔에서 다음 설정을 사용하여 기본 테넌시 VPC를 생성합니다.
[IPv4 CIDR 블록(IPv4 CIDR block)]에 12.0.0.0/16을 입력합니다.
[테넌시(Tenancy)]에서 [기본값(Default)]을 선택합니다.

2.    다음 설정이 포함된 전용 테넌시 VPC를 생성합니다.
[IPv4 CIDR 블록(IPv4 CIDR block)]에 11.0.0.0/16을 입력합니다.
[테넌시(Tenancy)]에서 [용(Dedicated)]을 선택합니다.

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

4.    각 VPC에서 서브넷을 생성합니다. 기본 테넌시 VPC에 대해 서로 다른 가용 영역에 2개 이상의 서브넷을 생성합니다.
참고: 서로 다른 가용 영역에 둘 이상의 서브넷을 생성하는 것이 이중화를 위한 모범 사례입니다. 이렇게 하면 Lambda에서 사용자의 함수에 고가용성을 제공할 수도 있습니다. 각 VPC에 서브넷이 여러 개인 경우 VPC의 CIDR 블록의 서브넷을 사용합니다. VPC에 서브넷을 하나만 생성한 경우 VPC와 동일한 CIDR 블록을 사용할 수 있습니다. 자세한 내용은 IPv4에 대한 VPC 및 서브넷 크기 조정을 참조하세요.

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

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

7.    다음 예제와 같이 새로운 각 VPC의 라우팅 테이블에 경로를 추가합니다. 라우팅 테이블을 생성할 때 다음을 수행해야 합니다.
**pcx-...**로 시작되는 [대상(Target)] 값의 경우 [피어링 연결(Peering Connection)]을 선택합니다. 그런 다음 생성한 피어링 연결을 선택합니다.
**igw-...**로 시작되는 [대상(Target)] 값의 경우 [인터넷 게이트웨이(Internet Gateway)]를 선택합니다. 그런 다음 생성한 인터넷 게이트웨이를 선택합니다.

자세한 내용은 라우팅 테이블에 경로 추가 및 라우팅 테이블에서 경로 제거를 참조하세요.

기본 테넌시 VPC 라우팅 테이블의 예

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

전용 테넌시 VPC 라우팅 테이블의 예

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

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

참고: Amazon VPC 액세스용 Lambda 실행 역할이 이미 있는 경우 이 섹션을 건너뜁니다.

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

2.    [역할(Roles)] 창에서 [역할 생성(Create role)]을 선택합니다.

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

4.    [권한 정책 연결(Attach permissions policies)]에서 AWSLambdaVPCAccessExecutionRole을 검색합니다. 해당 이름의 정책을 선택하고 [다음: 태그(Next: Tags)]를 선택합니다.

5.    (선택 사항) 새 리소스를 식별하고 구성하는 데 사용할 태그를 추가합니다.

6.    [검토(Review)]에 다음을 입력합니다.
[역할 이름(Role name)]에 이 Lambda 실행 역할의 이름을 입력합니다. 예를 들어 lambda_vpc_basic_execution을 입력합니다.
(선택 사항) [역할 설명(Role description)]에서 설명을 편집합니다.
[역할 생성(Create Role)]을 선택합니다.

테스트를 위한 새로운 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 콘솔의 [구성(Configuration)] 탭에서 [VPC]를 선택합니다. 그런 다음 [편집(Edit)]을 선택하고 다음을 수행합니다.
**Virtual Private Cloud(VPC)**에서 생성한 기본 테넌시 VPC를 선택합니다.
서브넷에서 VPC의 서브넷을 2개 이상 선택하십시오.
보안 그룹에서 보안 그룹을 선택하십시오.
참고: 기본 보안 그룹은 대부분의 활용 사례에 충분합니다. 자세한 내용은 VPC의 보안 그룹을 참조하세요.

2.    [저장(Save)]을 선택합니다.

연결 테스트

1.    전용 테넌시 VPC에서 EC2 인스턴스를 시작합니다.
참고: 나중에 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.    [세부 정보(Details)]를 선택하여 200 응답 코드에 대한 실행 결과를 검토하여 연결이 성공했는지 확인합니다.

200 응답 코드의 예

{
  "statusCode": 200
}

함수 출력이 평균, 최대 및 최소 지연 시간에 대해 0이 아닌 값이 표시되면 VPC 피어링 연결이 올바르게 설정된 것입니다.

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


관련 정보

전용 인스턴스

VPC 피어링이란?

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

Node.js로 Lambda 함수 빌드

AWS Lambda 함수 작업의 모범 사례

AWS 공식
AWS 공식업데이트됨 3년 전