Lambda 함수가 유효한 Amazon SQS 메시지를 다시 시도하여 전송 실패 대기열에 배치하는 이유는 무엇입니까?

최종 업데이트 날짜: 2021년 11월 1일

Amazon Simple Queue Service(Amazon SQS) 대기열의 메시지를 처리하도록 AWS Lambda 함수를 구성했습니다. 이제 유효한 Amazon SQS 메시지 중 일부가 maxReceiveCount까지 여러 번 수신되어 내 전송 실패 대기열에 저장됩니다. 이러한 상황이 발생하는 이유와 Lambda 함수가 모든 유효한 Amazon SQS 메시지를 처리하는지 확인하려면 어떻게 해야 합니까?

간략한 설명

Amazon SQS 메시지 배치를 읽을 때 Lambda 함수가 제한되거나, 오류를 반환하거나, 응답하지 않으면 메시지가 대기열로 반환됩니다. 가시성 시간 제한이 발생한 후 Lambda 함수는 메시지 배치를 다시 수신합니다. 함수가 유효한 메시지를 여러 번 처리하지 못하면 Amazon SQS가 전송 실패 대기열로 메시지를 전송합니다(구성된 경우).

유효한 메시지가 전송 실패 대기열에 배치되지 않도록 하려면 함수 코드가 멱등성이어야 하며 메시지를 여러 번 처리할 수 있어야 합니다. 자세한 내용은 Amazon SQS 메시지가 내 Lambda 함수를 두 번 이상 호출하지 못하게 하려면 어떻게 해야 하나요?를 참조하세요.

해결 방법

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

멱등성 모범 사례 및 예제 함수 논리에 대한 자세한 내용은 Lambda 함수를 멱등성으로 만들려면 어떻게 해야 합니까?를 참조하세요.

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

소스 대기열의 가시성 시간 제한을 함수의 시간 제한보다 최소 6배 더 길게 설정합니다. 이전 배치를 처리하는 동안 함수가 제한되는 경우 추가 시간을 통해 함수가 배치 처리를 다시 시도할 수 있습니다.

자세한 내용은 Amazon SQS 개발자 안내서의 가시성 시간 제한 설정 단원을 참조하십시오.

참고: 대기열의 가시성 시간 제한이 충분하지 않아 함수에서 메시지를 수신하지 못하면 메시지가 Amazon CloudWatch Logs에 기록되지 않습니다.

소스 대기열의 재구동 정책에서 maxReceiveCount 속성이 5 이상으로 설정되어 있는지 확인합니다.

소스 대기열의 재구동 정책에서 maxReceiveCount를 5 이상으로 설정합니다. 함수가 오류를 반환하거나 최대 동시성에 도달하여 호출할 수 없는 경우, 추가 시도를 통해 처리에 성공할 수 있습니다. maxReceiveCount가 5 이상인 경우 메시지가 전송 실패 대기열로 전송되기 전에 처리될 확률이 더 높습니다.

자세한 내용은 Amazon SQS 개발자 안내서의 전송 실패 대기열은 어떻게 작동합니까?일관성 없는 메시지 처리를 방지를 참조하십시오.

Lambda 함수가 반환하는 오류 식별 및 해결

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


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?