Lambda 네트워킹 문제 해결
Lambda 네트워킹 문제 해결
기본적으로 Lambda는 AWS 서비스와 인터넷에 연결되는 내부 가상 프라이빗 클라우드(VPC)에서 함수를 실행합니다. 로컬 네트워크 리소스에 접근하려면 함수가 계정의 VPC에 연결하도록 구성할 수 있습니다. 이 기능을 사용할 때는 Amazon Virtual Private Cloud(Amazon VPC) 리소스로 함수의 인터넷 접근과 네트워크 연결을 관리합니다.
본문
네트워크 연결 오류는 VPC의 라우팅 구성, 보안 그룹 규칙, AWS Identity and Access Management(IAM) 역할 권한, 네트워크 주소 변환(NAT), 또는 IP 주소·네트워크 인터페이스 같은 리소스 가용성 문제로 인해 발생할 수 있습니다. 문제에 따라 요청이 목적지에 도달할 수 없으면 특정 오류가 보이거나 타임아웃이 발생할 수 있습니다.
이 페이지의 내용:
- VPC: 함수가 인터넷 접근을 잃거나 타임아웃
- VPC: TCP 또는 UDP 연결이 간헐적으로 실패
- VPC: 인터넷 없이 AWS 서비스 접근이 필요한 함수
- VPC: 탄력적 네트워크 인터페이스 한도 도달
- EC2: "lambda" 유형의 탄력적 네트워크 인터페이스
- DNS: UNKNOWNHOSTEXCEPTION으로 호스트 연결 실패
VPC: 함수가 인터넷 접근을 잃거나 타임아웃
문제: Lambda 함수가 VPC에 연결한 뒤 인터넷 접근을 잃습니다.
오류: Error: connect ETIMEDOUT 176.32.98.189:443
오류: Error: Task timed out after 10.00 seconds
오류: ReadTimeoutError: Read timed out. (read timeout=15)
함수를 VPC에 연결하면 모든 아웃바운드 요청이 VPC를 통과합니다. 인터넷에 연결하려면 함수의 서브넷에서 퍼블릭 서브넷의 NAT 게이트웨이로 아웃바운드 트래픽을 보내도록 VPC를 구성하세요. 자세한 내용과 샘플 VPC 구성은 'VPC 연결 Lambda 함수에 인터넷 접근 활성화'를 참고하세요.
TCP 연결 중 일부가 타임아웃된다면, 서브넷이 네트워크 액세스 제어 목록(NACL)을 사용하는 경우 'VPC: TCP 또는 UDP 연결이 간헐적으로 실패'를 참고하세요. 그렇지 않으면 이는 패킷 단편화(fragmentation) 때문일 가능성이 높습니다. Lambda는 TCP나 ICMP에 대한 IP 단편화를 지원하지 않으므로 Lambda 함수는 들어오는 단편화된 TCP 요청을 처리할 수 없습니다.
VPC: TCP 또는 UDP 연결이 간헐적으로 실패
이 문제는 서브넷이 네트워크 액세스 제어 목록(ACL)을 사용하는 경우에만 적용됩니다. Lambda가 서브넷에 연결하는 데 네트워크 ACL은 필요하지 않습니다.
문제: 구성한 네트워크 액세스 제어 목록(ACL)이 있는 VPC 서브넷에 대한 Lambda 연결이 간헐적으로 끊깁니다.
VPC 활성화 Lambda 함수의 경우 AWS는 고객 계정에 하이퍼플레인(hyperplane) ENI를 만들고 임시 포트 102465535를 사용해 Lambda를 고객의 VPC에 연결합니다. 대상 서브넷에서 네트워크 ACL을 사용한다면 TCP와 UDP 모두에 포트 범위 102465535를 허용해야 합니다. 이 전체 포트 범위를 허용하지 않으면 간헐적인 연결 실패가 발생할 수 있습니다.
VPC: 인터넷 없이 AWS 서비스 접근이 필요한 함수
문제: Lambda 함수가 인터넷을 사용하지 않고 AWS 서비스에 접근해야 합니다.
인터넷 접근이 없는 프라이빗 서브넷에서 함수를 AWS 서비스에 연결하려면 VPC 엔드포인트를 사용하세요.
VPC: 탄력적 네트워크 인터페이스 한도 도달
오류: ENILimitReachedException: The elastic network interface limit was reached for the function's VPC.
Lambda 함수를 VPC에 연결하면 Lambda는 함수에 연결된 서브넷과 보안 그룹의 각 조합에 대해 탄력적 네트워크 인터페이스(ENI)를 만듭니다. 기본 서비스 할당량은 VPC당 네트워크 인터페이스 3,000개입니다. 할당량 증가를 요청하려면 Service Quotas 콘솔을 사용하세요.
EC2: "lambda" 유형의 탄력적 네트워크 인터페이스
오류 코드: Client.OperationNotPermitted
오류 메시지: The security group can not be modified for this type of interface
Lambda가 관리하는 탄력적 네트워크 인터페이스(ENI)를 수정하려 하면 이 오류가 발생합니다. Lambda가 만든 탄력적 네트워크 인터페이스의 갱신 작업에는 ModifyNetworkInterfaceAttribute가 Lambda API에 포함되지 않습니다.
DNS: UNKNOWNHOSTEXCEPTION으로 호스트 연결 실패
오류 메시지: UNKNOWNHOSTEXCEPTION
Lambda 함수는 DNS 해석을 위해 최대 20개의 동시 TCP 연결을 지원합니다. 함수가 그 한도를 소진하고 있을 수 있습니다. 대부분의 일반적인 DNS 요청은 UDP로 수행됩니다. 함수가 UDP DNS 연결만 하고 있다면 이는 문제가 아닐 가능성이 높습니다. 이 오류는 보통 잘못된 구성이나 성능 저하된 인프라 때문에 발생하므로, DNS 트래픽을 깊이 조사하기 전에 DNS 인프라가 올바르게 구성되고 정상인지, 그리고 Lambda 함수가 DNS에 지정된 호스트를 참조하는지 먼저 확인하세요.
문제가 TCP 연결 최대값과 관련된 것이라고 진단했다면 이 한도의 증가를 요청할 수 없습니다. Lambda 함수가 큰 DNS 페이로드 때문에 TCP DNS로 대체(fallback)된다면, 솔루션이 EDNS를 지원하는 라이브러리를 사용하는지 확인하세요. EDNS에 대한 자세한 내용은 RFC 6891 표준을 참고하세요. DNS 페이로드가 지속적으로 EDNS 최대 크기를 초과하면 솔루션이 여전히 TCP DNS 한도를 소진할 수 있습니다.