Lambda 함수가 유효한 Amazon SQS 메시지를 재시도하여 DLQ(Dead Letter Queue)에 배치하는 이유는 무엇입니까?

3분 분량
0

Amazon Simple Queue Service(Amazon SQS) 대기열의 메시지를 처리하도록 AWS Lambda 함수를 구성했습니다. 유효한 Amazon SQS 메시지 중 일부는 MaxReceiveCount까지 여러 번 수신되어 결국 DLQ(Dead Letter Queue)에 들어갑니다.

간략한 설명

Lambda 함수가 조절되어 있거나, 오류를 반환하거나, Amazon SQS 메시지 배치를 읽을 때 응답하지 않으면 메시지가 큐로 반환됩니다. 가시성 시간 초과가 발생하면 람다 함수가 메시지 배치를 다시 수신합니다. 함수가 유효한 메시지를 여러 번 처리하지 못하면 Amazon SQS는 구성한 경우 DLQ(Dead Letter Queue)로 메시지를 보냅니다.

유효한 메시지가 DLQ(Dead Letter Queue)에 배치되는 것을 방지하려면 함수 코드가 비활성 상태여야 하며 메시지를 여러 번 처리할 수 있어야 합니다. 자세한 내용은 아마존 SQS 메시지가 람다 함수를 두 번 이상 호출하지 못하도록 하려면 어떻게 해야 하나요?를 참조하세요.

해결 방법


Lambda 함수의 코드가 멱등성 상태인지 확인합니다.

멱등성 모범 사례 및 함수 로직 예제는 함수를 멱등성으로 만들려면 어떻게 하나요?를 참조하세요.

Amazon SQS 큐의 가시성 시간 제한이 Lambda 함수의 시간 제한 설정보다 최소 6배 이상 긴지 확인합니다.

소스 큐의 가시성 시간 제한을 함수의 시간 제한보다 6배 이상 길게 설정하세요. 이 추가 시간을 사용하면 함수가 이전 배치를 처리하는 동안 스로틀링된 경우 함수가 배치 처리를 다시 시도할 수 있습니다.

자세한 내용은 Amazon SQS 개발자 가이드에서 가시성 시간 제한 설정하기를 참조하세요.

참고: 대기열의 표시 시간 제한이 충분히 길지 않아 함수가 메시지를 수신하지 못하는 경우 Amazon CloudWatch Logs에 메시지가 기록되지 않습니다.

원본 큐의 재전송 정책에서 maxReceiveCount 속성이 5개 이상으로 설정되어 있는지 확인합니다.

소스 대기열의 재전송 정책에서 maxReceiveCount를 최소 5개로 설정합니다. 함수가 오류를 반환하거나 최대 동시성에 도달하여 호출할 수 없는 경우, 추가 시도를 통해 처리에 성공할 수 있습니다. maxReceiveCount가 5개 이상이면 메시지가 DLQ(Dead Letter Queue)로 전송되기 전에 처리될 기회가 더 많아집니다.

최대 동시성 설정 제한을 업데이트하려면 아마존 SQS 이벤트 소스에 대한 최대 동시성 구성을 참조하세요.

자세한 내용은 Amazon SQS 개발자 가이드에서 DLQ(Dead Letter Queue)의 작동 방식일관성 없는 메시지 처리 피하기를 참조하세요.

Lambda 함수의 스로틀링 및 예약된 동시성 확인

Lambda 함수는 리소스 및 다운스트림 애플리케이션을 보호하기 위해 때때로 스로틀링됩니다. Lambda는 들어오는 트래픽을 수용하기 위해 자동으로 확장되지만 다양한 이유로 인해 함수가 여전히 스로틀링될 수 있습니다.

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

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

동일한 AWS 리전에 있는 다른 함수가 동시성 제한을 사용하는 경우 스로틀링이 발생할 수 있습니다. 스로틀링이 발생하는 람다 함수는 SQS 메시지를 DLQ(Dead Letter Queue)로 보냅니다.

실패한 배치에서 모든 SQS 메시지를 재처리하지 않기

일괄 처리 시 오류가 발생한 Lambda 함수의 경우, Lambda가 성공적으로 처리한 메시지를 포함하여 모든 SQS 메시지가 DLQ(Dead Letter Queue)에 표시됩니다. 그러면 Lambda는 전체 SQS 메시지 배치를 다시 시도합니다.

실패한 배치의 모든 SQS 메시지를 다시 처리하지 않으려면 FunctionResponseTypes 목록에서 ReportBatchItemFailures 값을 사용하여 이벤트 소스 매핑을 구성하세요. 이렇게 하면 함수가 부분적인 성공을 반환하고 재시도 횟수를 줄일 수 있습니다. 자세한 내용은 배치 항목 실패 보고를 참조하세요.

Lambda 함수가 반환하는 모든 오류를 식별하고 해결합니다.

Lambda 함수 오류를 해결하려면 함수 오류를 어떻게 해결하나요?의 지침을 따르세요. 함수가 오류를 반환하지 않는 경우에만 함수가 대기열에서 메시지를 자동으로 제거합니다.

관련 정보

Lambda 함수에 대한 동시성 제한 증가를 요청하려면 어떻게 해야 하나요?

"속도 초과" 및 429 "너무 많은 요청 예외" 오류가 발생하는 람다 함수 스로틀링 문제를 해결하려면 어떻게 해야 하나요?

AWS 공식
AWS 공식업데이트됨 2년 전
댓글 없음

관련 콘텐츠