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)로 메시지를 보냅니다.
참고: 대기열의 표시 시간 제한이 충분히 길지 않아 함수가 메시지를 수신하지 못하는 경우 Amazon CloudWatch Logs에 메시지가 기록되지 않습니다.
원본 큐의 재전송 정책에서 maxReceiveCount 속성이 5개 이상으로 설정되어 있는지 확인합니다.
소스 대기열의 재전송 정책에서 maxReceiveCount를 최소 5개로 설정합니다. 함수가 오류를 반환하거나 최대 동시성에 도달하여 호출할 수 없는 경우, 추가 시도를 통해 처리에 성공할 수 있습니다. maxReceiveCount가 5개 이상이면 메시지가 DLQ(Dead Letter Queue)로 전송되기 전에 처리될 기회가 더 많아집니다.
Lambda 콘솔을 사용하여 예약된 동시성의 설정을 확인하세요. 예약된 동시성이 구성되지 않은 경우 함수는 예약되지 않은 동시성을 사용합니다. 함수를 사용한 호출이 예약되지 않은 동시성을 초과하면 스로틀링이 발생합니다.
참고: 예약된 동시성이 0인 함수를 구성한 경우 함수는 이벤트를 처리할 수 없으므로 스로틀링됩니다. 값을 0보다 큰 숫자로 늘려야 합니다.
동일한 AWS 리전에 있는 다른 함수가 동시성 제한을 사용하는 경우 스로틀링이 발생할 수 있습니다. 스로틀링이 발생하는 람다 함수는 SQS 메시지를 DLQ(Dead Letter Queue)로 보냅니다.
실패한 배치에서 모든 SQS 메시지를 재처리하지 않기
일괄 처리 시 오류가 발생한 Lambda 함수의 경우, Lambda가 성공적으로 처리한 메시지를 포함하여 모든 SQS 메시지가 DLQ(Dead Letter Queue)에 표시됩니다. 그러면 Lambda는 전체 SQS 메시지 배치를 다시 시도합니다.
실패한 배치의 모든 SQS 메시지를 다시 처리하지 않으려면 FunctionResponseTypes 목록에서 ReportBatchItemFailures 값을 사용하여 이벤트 소스 매핑을 구성하세요. 이렇게 하면 함수가 부분적인 성공을 반환하고 재시도 횟수를 줄일 수 있습니다. 자세한 내용은 배치 항목 실패 보고를 참조하세요.