"Rate Exceeded" 및 429 "TooManyRequestsException" 오류가 발생한 Lambda 함수 제한 문제를 해결하려면 어떻게 해야 하나요?

3분 분량
0

AWS Lambda 함수에서 "Rate Exceeded" 및 429 "TooManyRequestsException" 오류가 발생합니다.

해결 방법

Lambda 함수는 리소스와 다운스트림 애플리케이션을 보호하기 위해 조절되는 경우가 있습니다. Lambda가 수신 트래픽을 수용하기 위해 자동으로 스케일링되더라도 다양한 이유로 인해 함수가 계속 제한될 수 있습니다.

Rate ExceededTooManyRequestsException 오류를 비롯한 Lambda 제한 문제를 해결하려면 다음 단계를 검토하세요.

어떤 리소스가 제한되었는지 확인합니다.

조절 오류는 Lambda 함수에서 발생하지 않을 수 있습니다. 함수 호출 과정에서 API 호출에 대해 제한이 발생할 수도 있습니다.

제한이 발생한 리소스를 확인하려면 다음 리소스를 검사하세요.

Amazon CloudWatch Logs를 확인하여 제한 오류가 있지만, Lambda Throttles(제한) 지표에는 해당 데이터 포인트가 없는 상태인지 확인합니다.

Lambda Throttles 지표가 없다면, Lambda 함수 코드의 API 호출에서 조절이 발생하고 있는 것입니다.

함수 코드에 조절된 API 호출이 있는지 확인합니다.

특정 API 호출이 제한된 경우 코드의 지수 백오프를 사용하여 API 호출을 재시도해야 합니다.

참고: API 호출에 더 높은 초당 트랜잭션(TPS) 할당량이 필요한 경우 서비스 할당량 증가를 요청할 수 있습니다. 모든 할당량을 조정할 수 있는 것은 아닙니다.

함수의 동시성 지표 확인

Amazon CloudWatch의 Lambda 지표를 검토합니다.

조절이 나타난 AWS 리전에서 함수에 대한 ConcurrentExecutions 지표를 확인합니다.

동일한 타임스탬프를 기준으로 ConcurrentExecutions 지표와 Throttles 지표를 비교합니다.

ConcurrentExecutions에 대해서는 Maximum 통계를 확인하고 Throttles에 대해서는 Sum 통계를 확인합니다. 최대 ConcurrentExecutionsThrottles 그래프의 해당 데이터 포인트와 함께 해당 리전의 계정 수준 동시성 할당량에 가까운지 확인합니다.

현재 특정 AWS 리전에 대한 초기 버스트 동시성 할당량을 초과했는지 확인

CloudWatch 콘솔의 Lambda에 대한 지표 페이지에서 그래프의 시간 범위를 1분으로 줄입니다. 버스트 조정으로 인해 제한을 받는 경우, 그래프에서 ConcurrentExecutions의 계단형 패턴에 따라 Throttles(제한)가 급증하는 것을 볼 수 있습니다.

참고: 버스트 동시성 제한 문제를 해결하기 위해서는 프로비저닝된 동시성을 구성할 수 있습니다.

함수에 대해 Duration 지표가 급증하는지 확인합니다.

동시성은 함수 기간에 따라 달라집니다. 함수 코드를 완료하는 데 너무 오래 걸리면 컴퓨팅 리소스가 충분하지 않을 수 있습니다.

함수의 메모리 설정 값을 높려 보세요. 그런 다음, AWS X-RayCloudWatch Logs를 사용하여 기간 급상승의 원인을 격리하세요.

참고: 메모리 설정 값을 변경할 경우 실행 시간에 대해 발생하는 요금에 영향을 미칠 수 있습니다.

Amazon Virtual Private Cloud(VPC)에 함수를 추가할 수 있습니다. 함수가 Amazon VPC에 있는 경우, Amazon VPC에 연결된 Lambda 함수에 인터넷 액세스 권한을 부여하려면 어떻게 해야 하나요?를 참조하세요.

함수에 대해 Errors(오류) 지표가 증가하는지 확인합니다.

오류가 증가하면 재시도가 발생하고 호출이 전반적으로 증가할 수 있습니다. 호출이 증가하면 동시성이 증가할 수 있습니다. CloudWatch Logs를 사용하여 오류를 식별 및 제거하고 함수 코드가 예외 사항을 처리하도록 할 수 있습니다.

참고: 동시 실행 할당량의 10배인 리전별 호출 요청 수(초당 요청 수)를 기준으로 함수가 제한될 수도 있습니다.

예약된 동시성 구성

함수에 예약된 동시성을 구성했는지 확인합니다.

Lambda 콘솔을 사용하여 설정을 확인하거나 GetFunction API를 호출합니다.

참고: 예약된 동시성이 0이 되도록 함수를 구성하면 이벤트를 처리할 수 없기 때문에 함수가 제한됩니다. 해당 값을 0보다 큰 숫자로 늘렸는지 확인하세요.

함수에 대한 CloudWatch의 Maximum 통계 검토

함수 지표가 어느 시점에서든 ConcurrentExecutions 지표의 최댓값에 도달하는지 확인합니다.

함수에 대한 예약된 동시성을 함수 제한이 발생하지 않는 동시성 값으로 높입니다.

Lambda 콘솔을 사용하여 설정을 변경하거나 PutFunctionConcurrency API를 호출합니다.

앱에서 지수 백오프 사용

제한된 요청을 재시도하려면 Lambda 함수를 호출하는 애플리케이션에서 지수 백오프를 사용하는 것이 모범 사례입니다.

DLQ(Dead Letter Queue) 사용

Amazon Simple Storage Service(S3)Amazon EventBridge와 같은 비동기식 이벤트 소스의 경우 DLQ(Dead Letter Queue)를 사용하여 함수를 구성합니다. DLQ는 지속적인 제한으로 인해 삭제되는 모든 이벤트를 포착하여 상당한 제한이 발생하는 경우 데이터를 보호할 수 있습니다.

참고: Amazon Simple Queue Service(Amazon SQS) 이벤트 소스의 경우에는 DLQ를 Amazon SQS 대기열에 구성해야 합니다.

서비스 할당량 증가 요청

동시 실행을 위해 워크로드의 서비스 할당량을 높여야 하는 경우 서비스 할당량 콘솔을 사용하여 서비스 할당량 증가를 요청할 수 있습니다.


관련 정보

AWS Lambda 함수 작업의 모범 사례

AWS Lambda의 호출 문제 해결

AWS Lambda의 오류 처리 및 자동 재시도

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