Lambda 함수 SQS ReportBatchItemFailures 문제를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2022년 2월 24일

Amazon Simple Queue Service(Amazon SQS)를 이벤트 소스로 구성한 내 AWS Lambda 함수에 대해 부분 배치 응답을 설정했습니다. 그랬더니 내 Lambda 함수가 ‘ReportBatchItemFailures’ 목록을 반환하는데, 함수 오류가 없을 때 Lambda가 전체 메시지 배치를 재시도하거나, Lambda가 부분 메시지 배치를 아예 재시도하지 않습니다. 이 문제를 해결하려면 어떻게 해야 합니까?

해결 방법

참고: 부분 Amazon SQS 배치를 프로그래밍 방식으로 처리하려면 Lambda 함수에서 부분 배치 응답을 수동으로 구성해야 합니다. 자세한 내용은 AWS Lambda 개발자 안내서의 배치 항목 실패 보고를 참조하세요.

Lambda 함수에 대한 부분 배치 응답을 활성화하는 AWS Command Line Interface(AWS CLI) 명령의 예

중요: <esm_UUID>Amazon SQS 이벤트 소스 매핑의 범용 고유 식별자(UUID)로 바꿉니다. 이벤트 소스 매핑의 UUID를 검색하려면 list-event-source-mappings AWS CLI 명령을 실행합니다. AWS CLI 명령을 실행할 때 오류가 발생하는 경우 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.

aws lambda update-event-source-mapping --uuid <esm_UUID> --function-response-types "ReportBatchItemFailures"

함수 오류가 없을 때 Lambda가 전체 SQS 메시지 배치를 재시도하는 ReportBatchItemFailures 문제를 해결하려면

Lambda 함수 코드에서 부분 배치 응답을 검토하여 다음 응답이 있는지 확인합니다. 그런 다음 기록된 응답을 기반으로 문제를 해결합니다.

참고: 함수가 다음 응답 중 하나를 반환하는 경우 Lambda는 배치를 완전한 실패로 처리합니다.

유효한 JSON이 아닌 EventResponse에 대한 응답

return "Hello world"
return ""

빈 itemIdentifier 값에 대한 응답

return {"batchItemFailures":[{"itemIdentifier": ""}]}

Null itemIdentifier 값에 대한 응답

return {"batchItemFailures":[{"itemIdentifier": None}]}

잘못된 키 이름을 가진 itemIdentifier 값에 대한 응답

return {"batchItemFailures":[{"bad_key": messageID}]}

존재하지 않는 메시지 ID를 가진 itemIdentifier 값에 대한 응답

return {"batchItemFailures":[{"itemIdentifier": "random_ID"}]}

중요: Lambda 함수는 유효한 itemIdentifier JSON 값을 반환해야 합니다.

Lambda가 부분 메시지 배치를 재시도하지 않는 ReportBatchItemFailures 문제를 해결하려면

Lambda 함수 코드에서 부분 배치 응답을 검토하여 다음 응답이 있는지 확인합니다. 그런 다음 기록된 응답을 기반으로 문제를 해결합니다.

참고: 함수가 다음 응답 중 하나를 반환하는 경우 Lambda는 배치를 완전한 성공으로 처리합니다.

빈 batchItemFailures 목록에 대한 응답

return {"batchItemFailures":[]}

Null batchItemFailures 목록에 대한 응답

return {"batchItemFailures": None}

비어 있거나 예상치 못한 JSON 값을 가진 EventResponse 에 대한 응답

return {}
return {"Key1":"Value1"}

Null EventResponse에 대한 응답

return
return None

중요: Lambda 함수는 유효한 메시지 ID 목록을 포함하는 “batchItemFailures” JSON 값이 있는 응답을 반환해야 합니다.