네트워킹
Amazon Virtual Private Cloud(Amazon VPC)는 AWS 계정 전용 AWS 클라우드의 가상 네트워크이다. Amazon VPC를 사용하여 데이터베이스, 캐시 인스턴스 또는 내부 서비스 등과 같은 리소스에 대한 프라이빗 네트워크를 생성할 수 있다. Amazon VPC에 대한 자세한 내용은 Amazon VPC가 무엇인가요?를 참조한다.
Lambda 함수는 항상 Lambda 서비스가 소유한 VPC 내에서 실행된다. Lambda는 이 VPC 네트워크 액세스 및 보안 규칙을 적용하고 Lambda는 VPC를 자동으로 유지 관리 및 모니터링한다. Lambda 함수가 계정 VPC의 리소스에 액세스해야 하는 경우 VPC에 액세스하도록 함수를 구성한다. Lambda는 Lambda 함수가 Lambda VPC에서 계정 VPC의 ENI(탄력적 네트워크 인터페이스)로 연결하는 데 사용하는 Hyperplane ENI라는 관리형 리소스를 제공한다.
VPC 또는 Hyperplane ENI의 사용에 따르는 추가 요금은 없다. NAT 게이트웨이와 같은 일부 VPC 구성 요소에 대해 요금이 부과된다. 자세한 내용은 Amazon VPC 요금을 참조한다.
1. VPC 네트워크 요소
Amazon VPC 네트워크에는 다음과 같은 네트워크 요소가 포함된다.
-
탄력적 네트워크 인터페이스 - 탄력적 네트워크 인터페이스는 VPC에서 가상 네트워크 카드를 나타내는 논리적 네트워킹 구성 요소이다.
-
서브넷 - VPC의 IP 주소 범위이다. 지정된 서브넷으로 AWS 리소스를 추가할 수 있다. 인터넷에 연결되어야 하는 리소스에는 퍼블릭 서브넷을 사용하고, 인터넷에 연결되지 않는 리소스에는 프라이빗 서브넷을 사용한다.
-
보안 그룹 - 보안 그룹을 사용하여 각 서브넷의 AWS 리소스에 대한 액세스를 제어한다.
-
액세스 제어 목록(ACL) - 네트워크 ACL을 사용하여 서브넷에 추가 보안을 제공한다. 기본 서브넷 ACL은 인바운드와 아웃바운드 트래픽을 모두 허용한다.
-
라우팅 테이블 - VPC에 대한 네트워크 트래픽을 지시하는 데 AWS에서 사용하는 경로 집합을 포함한다. 서브넷을 특정 라우팅 테이블과 명시적으로 연결할 수 있다. 기본적으로 서브넷은 기본 라우팅 테이블과 연결된다.
-
경로 - 라우팅 테이블의 각 경로는 IP 주소 범위와 Lambda가 해당 범위에 대한 트래픽을 전송하는 대상을 지정한다. 또한 경로는 트래픽을 전송할 게이트웨이, 네트워크 인터페이스 또는 연결인 대상을 지정한다.
-
NAT 게이트웨이 - 프라이빗 VPC 프라이빗 서브넷에서 인터넷으로의 액세스를 제어하는 AWS 네트워크 주소 변환(NAT) 서비스이다.
-
VPC 엔드포인트 - Amazon VPC 엔드포인트를 사용하여 인터넷이나 NAT 장치, VPN 연결 또는 AWS Direct Connect 연결을 통해 액세스할 필요 없이 AWS에서 호스팅되는 서비스에 대한 프라이빗 연결을 생성할 수 있다.
2. Lambda 함수를 VPC에 연결
Lambda 함수는 항상 Lambda 서비스가 소유한 VPC 내에서 실행된다. 기본적으로 Lambda 함수는 사용자 계정의 VPC에 연결되지 않는다. 계정에서 VPC에 함수를 연결할 때 VPC가 액세스 권한을 제공하지 않으면 함수는 인터넷에 액세스할 수 없다.
Lambda는 Hyperplane ENI를 사용하여 VPC에서 리소스에 액세스한다. Hyperplane ENI는 VPC-VPC 간 NAT(V2N)를 사용하여 Lambda VPC에서 계정 VPC로 NAT 기능을 제공한다. V2N은 Lambda VPC에서 계정 VPC로의 연결을 제공하지만 다른 방향으로는 제공하지 않는다.
Lambda 함수를 생성(혹은 VPC 설정을 업데이트)하면 Lambda는 함수의 VPC 구성에서 각 서브넷에 대해 Hyperplane ENI를 할당한다. 함수가 동일한 서브넷과 보안 그룹을 공유하는 경우 여러 Lambda 함수가 네트워크 인터페이스를 공유할 수 있다.
다른 AWS 서비스에 연결하려면 VPC와 지원되는 AWS 서비스 간의 프라이빗 통신용 VPC 엔드포인트를 사용할 수 있다. 다른 접근 방식은 NAT 게이트웨이를 사용하여 아웃바운드 트래픽을 다른 AWS 서비스로 라우팅하는 것이다.
함수에 인터넷 액세스 권한을 부여하려면 아웃바운드 트래픽을 퍼블릭 서브넷의 NAT 게이트웨이로 라우팅한다. NAT 게이트웨이는 퍼블릭 IP 주소가 있으므로 VPC의 인터넷 게이트웨이를 통해 인터넷에 연결할 수 있다.
3. Lambda Hyperplane ENI
Hyperplane ENI는 Lambda 서비스에서 생성 및 관리하는 관리형 네트워크 리소스이다. Lambda VPC의 여러 실행 환경에서는 Hyperplane ENI를 사용하여 계정의 VPC 내부의 리소스에 안전하게 액세스할 수 있다. Hyperplane ENI는 Lambda VPC에서 계정 VPC로 NAT 기능을 제공한다. Hyperplane ENI에 대한 자세한 내용은 AWS 컴퓨팅 블로그에서 AWS Lambda 함수에 대한 향상된 VPC 네트워킹 단원을 참조한다.
계정의 고유한 보안 그룹과 서브넷 조합에는 서로 다른 네트워크 인터페이스가 필요하다. 동일한 보안 그룹 및 서브넷 조합을 공유하는 계정의 함수는 동일한 네트워크 인터페이스를 사용한다.
계정의 함수가 ENI 리소스를 공유하므로 ENI 수명 주기는 다른 Lambda 리소스보다 복잡하다. 다음 섹션에서는 ENI 수명 주기에 대해 설명한다.
ENI 수명 주기
-
ENI 생성
-
ENI 관리
-
ENI 삭제
1) ENI 생성
Lambda는 새로 생성된 VPC 지원 함수 또는 기존 함수에 대한 VPC 구성 변경을 위해 Hyperplane ENI 리소스를 생성할 수 있다. Lambda가 필요한 리소스를 생성하는 동안 함수는 보류 중인 상태로 유지된다. Hyperplane ENI가 준비되면 함수가 활성 상태로 전환되고 ENI를 사용할 수 있게 된다. Lambda가 Hyperplane ENI를 생성하는 데 몇 분이 소요될 수 있다.
새로 생성된 VPC 지원 함수의 경우 함수 상태가 활성으로 전환될 때까지 함수에서 작동하는 호출이나 기타 API 작업이 실패한다.
기존 함수에 대한 VPC 구성 변경의 경우 모든 함수 호출은 함수 상태가 활성으로 전환될 때까지 이전 서브넷 및 보안 그룹 구성과 연결된 Hyperplane ENI를 계속 사용한다.
Lambda 함수가 연속으로 몇 주 동안 유휴 상태로 유지되면 Lambda는 사용되지 않는 Hyperplane ENI를 회수하고 함수 상태를 유휴 상태로 설정한다. 다음 호출은 Lambda가 유휴 함수를 다시 활성화하도록 한다. 호출이 실패하고 Lambda가 Hyperplane ENI의 생성 또는 할당을 완료할 때까지 함수가 보류 상태로 전환된다.
함수 상태에 대한 자세한 내용은 Lambda 함수 상태 단원을 참조한다.
2) ENI 관리
Lambda는 함수의 실행 역할에 있는 권한을 사용하여 네트워크 인터페이스를 생성하고 관리한다. Lambda는 계정에서 VPC 지원 함수에 대한 고유한 서브넷과 보안 그룹 조합을 정의할 때 Hyperplane ENI를 생성한다. Lambda는 계정에서 동일한 서브넷과 보안 그룹 조합을 사용하는 다른 VPC 지원 함수에 대해 Hyperplane ENI를 재사용한다.
동일한 Hyperplane ENI를 사용할 수 있는 Lambda 함수 수에는 할당량이 없다. 그러나 각 Hyperplane ENI는 최대 65,000개의 연결/포트를 지원한다. 연결 수가 65,000개를 초과하는 경우 Lambda는 추가 연결을 제공하기 위해 새 Hyperplane ENI를 생성한다.
다른 VPC에 액세스하도록 함수 구성을 업데이트하면 Lambda가 이전 VPC의 Hyperplane ENI에 대한 연결을 종료한다. 새 VPC 대한 연결을 업데이트하는 프로세스는 몇 분 정도 걸릴 수 있다. 이 시간 동안 함수에 대한 호출은 이전 VPC를 계속 사용한다. 업데이트가 완료되면 새 VPC의 Hyperplane ENI를 사용하여 새 호출이 시작된다. 이 시점에서 Lambda 함수는 더 이상 이전 VPC와 연결되지 않는다.
3) ENI 삭제
VPC 구성을 제거하기 위해 함수를 업데이트하는 경우 Lambda에서 연결된 Hyperplane ENI를 삭제하는 데 최대 20분이 소요된다. Lambda는 다른 함수(또는 게시된 함수 버전)가 해당 Hyperplane ENI를 사용하고 있지 않은 경우에만 ENI를 삭제한다.
Lambda는 함수 실행 역할의 권한에 따라 Hyperplane ENI를 삭제한다. Lambda가 Hyperplane ENI를 삭제하기 전에 실행 역할을 삭제하면 Lambda가 Hyperplane ENI를 삭제할 수 없다. 수동으로 삭제를 수행할 수 있다.
Lambda는 계정의 함수 또는 함수 버전에서 사용 중인 네트워크 인터페이스를 삭제하지 않는다. Lambda ENI Finder를 사용하여 Hyperplane ENI를 사용하는 함수 또는 함수 버전을 식별할 수 있다. 더 이상 필요하지 않은 함수 또는 함수 버전의 경우 Lambda가 Hyperplane ENI를 삭제하도록 VPC 구성을 제거할 수 있다.
4. 연결
Lambda는 TCP(전송 제어 프로토콜)와 UDP(사용자 데이터그램 프로토콜)의 두 가지 유형의 연결을 지원한다.
VPC를 생성하면 Lambda는 자동으로 DHCP 옵션 세트를 생성하여 VPC와 연결한다. VPC에 대해 고유한 DHCP 옵션 세트를 구성할 수 있다. 자세한 내용은 Amazon VPC DHCP 옵션을 참조한다.
Amazon은 VPC용 DNS 서버(Amazon Route 53 Resolver)를 제공한다. 자세한 내용은 VPC에 대한 DNS 지원을 참조한다.
5. 보안
AWS는 VPC의 보안을 강화하기 위해 보안 그룹과 네트워크 ACL을 제공한다. 보안 그룹은 인스턴스용 인바운드 및 아웃바운드 트래픽을 제어하고, 네트워크 ACL은 서브넷용 인바운드 및 아웃바운드 트래픽을 제어한다. 보안 그룹은 대부분의 서브넷에 대해 충분한 액세스 제어를 제공한다. VPC에 대한 추가 보안 계층을 원하는 경우 네트워크 ACL을 사용할 수 있다. 자세한 내용은 Amazon VPC의 인터네트워크 트래픽 개인 정보 보호를 참조한다. 생성된 각 서브넷에는 자동으로 VPC의 기본 네트워크 ACL이 연결된다. 연결된 네트워크 ACL 및 기본 네트워크 ACL의 내용을 변경할 수 있다.
VPC 설정에 Lambda 특정 조건 키를 사용하여 Lambda 함수에 대한 추가 권한 제어를 제공할 수 있다. VPC 조건 키에 대한 자세한 내용은 VPC 설정에 IAM 조건 키 사용을 참조한다.
6. Observability
VPC 흐름 로그를 사용하여 VPC의 네트워크 인터페이스에서 송수신되는 IP 트래픽에 대한 정보를 캡처할 수 있다. 흐름 로그 데이터는 Amazon CloudWatch Logs 또는 Amazon S3에 게시할 수 있다. 흐름 로그를 생성한 다음 선택된 대상의 데이터를 가져와 확인할 수 있다.
Note
함수를 VPC에 연결하면 CloudWatch 로그 메시지는 VPC 경로를 사용하지 않는다. Lambda는 이를 로그에 대한 일반 라우팅을 사용하여 전송한다.