내용으로 건너뛰기

Lambda 함수의 "Rate exceeded" 및 "TooManyRequestsException" 스로틀링 오류를 해결하려면 어떻게 해야 합니까?

3분 분량
0

AWS Lambda 함수에서 "Rate exceeded" 및 "TooManyRequestsException" 스로틀링 오류를 반환합니다.

해결 방법

스로틀이 발생한 리소스 확인

Lambda 함수에서는 스로틀 오류가 발생하지 않을 수 있습니다. 스로틀은 함수 호출 전반의 API 호출에서 발생할 수 있습니다.

스로틀이 발생한 리소스를 확인하려면 Amazon CloudWatch Logs와 지표에서 스로틀링 오류를 확인하십시오. Lambda 스로틀 지표가 없는 경우 Lambda 함수 코드의 API 호출에서 스로틀링이 발생합니다.

함수 로그와 코드에서 스로틀이 발생한 API 호출이 있는지 확인

API 호출에서 스로틀이 발생한 경우 코드에서 지수 백오프를 사용하여 API 호출을 재시도해야 합니다.

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

함수 동시성 CloudWatch 지표 확인

스로틀링이 발생하는 AWS 리전에서 함수의 ConcurrentExecutions 지표를 확인하십시오.

ConcurrentExecutions에 대한 최대 통계스로틀에 대한 합계 통계를 확인합니다. 최대 ConcurrentExecutions스로틀 그래프의 관련 데이터 포인트와 함께 리전의 계정 수준 동시성 할당량에 가까운지 확인하십시오.

동시성 할당량 확인

함수의 리전에 대한 동시성 규모 조정 속도를 초과했는지 확인하십시오. 동시성 규모 조정 속도는 10초마다 1,000개의 실행 환경 인스턴스입니다. 자세한 내용은 Lambda 규모 조정 동작을 참조하십시오.

CloudWatch 콘솔의 Lambda에 대한 지표 페이지에서 그래프의 시간 범위를 1분으로 줄이십시오. 버스트 동시성 제한에 의해 제한되는 경우 그래프에서 ConcurrentExecutions의 계단식 패턴에 해당하는 스로틀이 급증하는 것을 볼 수 있습니다.

버스트 동시성 제한을 피하려면 프로비저닝된 동시성을 구성할 수 있습니다. 또한 Lambda 함수에 대한 동시성 제한 증가를 요청할 수도 있습니다.

함수의 기간 지표에서 급증 확인

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

실행 로그에서 Max Memory Used 필드를 검토하여 함수의 구성된 메모리 설정과 값을 비교하십시오. Max Memory Used가 구성된 메모리에 가까우면 일반적으로 함수가 메모리에 바인딩된 것입니다. 자세한 내용은 Lambda 함수에 적합한 메모리 설정 결정을 참조하십시오.

예약된 동시성 구성

함수에 대해 예약된 동시성을 구성했는지 확인하십시오. 예약된 동시성은 함수의 동시성 경계 역할을 하며 예약되지 않은 동시성을 소비할 수 있는 다른 함수로부터 함수를 보호하기도 합니다. 예약된 동시성은 함수 스로틀링을 완화할 수 있지만 의도치 않게 함수를 스로틀링할 수도 있습니다.

Lambda 콘솔을 사용하여 예약된 동시성 설정을 확인하십시오. 예약된 동시성이 구성되지 않은 경우 함수는 예약되지 않은 동시성을 사용합니다. 함수를 사용한 호출이 예약되지 않은 동시성을 초과하면 스로틀링이 발생합니다.

참고: 예약된 동시성이 0인 함수를 구성한 경우 함수는 이벤트를 처리할 수 없으므로 스로틀링됩니다. 값을 0보다 큰 숫자로 늘려야 합니다.

예약된 동시성을 구성하거나 늘리려면 함수의 예약된 동시성 구성을 참조하십시오. 예약된 동시성 문제를 해결하려면 Lambda 예약된 동시성 문제를 해결하려면 어떻게 해야 합니까?를 참조하십시오.

지수 백오프 사용

스로틀링 오류를 방지하려면 API 호출 시 지수 백오프 및 재시도를 사용하십시오. Lambda 함수에 대한 API 호출을 수행하는 애플리케이션에서는 지수 백오프를 사용하는 것이 좋습니다.

자세한 내용은 지수 백오프 및 지터재시도 동작을 참조하십시오. 시간이 지남에 따라 API 호출을 분산해야 합니다. 시간이 지남에 따라 작업이 분산되도록 무작위로 작업을 예약하십시오.

Dead Letter Queue(DLQ) 사용

Amazon Simple Storage Service(Amazon S3)Amazon EventBridge Scheduler와 같은 비동기 이벤트 소스의 경우 Dead Letter Queue(DLQ)를 사용하여 함수를 구성합니다. 그런 다음, 비동기식 간접 호출 구성에 대한 오류 처리를 확인합니다. Dead Letter Queue(DLQ)는 지속적인 스로틀로 인해 폐기되는 모든 이벤트를 포착하여 데이터를 보호할 수 있습니다.

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

서비스 할당량 증가 요청

워크로드의 동시 실행에 대해 더 높은 서비스 할당량이 필요한 경우 서비스 할당량 증가를 요청하십시오.

관련 정보

Lambda 함수 작업의 모범 사례

Lambda의 호출 문제 해결

Lambda의 재시도 동작 이해

AWS 공식업데이트됨 일 년 전