¿Cómo soluciono los errores ReportBatchItemFailures de la función de Lambda de SQS?

3 minutos de lectura
0

Configuré la respuesta parcial por lotes para mi función de AWS Lambda que tiene Amazon Simple Queue Service (Amazon SQS) configurado como origen de eventos. Ahora, mi función de Lambda devuelve una lista de errores "ReportBatchItemFailures" y ocurre una de las siguientes situaciones: Lambda vuelve a intentar un lote de mensajes completo cuando no se produjo un error de función, o Lambda no reintenta ninguno de los lotes de mensajes parciales. ¿Cómo soluciono este problema?

Resolución

Nota: tiene que configurar manualmente la respuesta parcial por lotes en la función de Lambda para procesar lotes parciales de Amazon SQS mediante programación. Para obtener más información, consulte Información de errores de elementos por lotes en la Guía para desarrolladores de AWS Lambda.

Ejemplo de comando de AWS Command Line Interface (AWS CLI) para activar la respuesta por lotes parcial para una función de Lambda

Importante: reemplace <esm_UUID> por el identificador único universal (UUID) de la asignación de origen de eventos de Amazon SQS. Para recuperar el UUID de la asignación de origen de eventos, ejecute el comando de AWS CLI list-event-source-mappings. Si recibe errores al ejecutar comandos de AWS CLI, asegúrese de que utiliza la versión más reciente de AWS CLI.

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

Para solucionar los errores ReportBatchItemFailures en los que Lambda vuelve a intentar un lote de mensajes de SQS completo cuando no hubo un error de función

Revise la respuesta parcial por lotes en el código de la función de Lambda para ver si hay alguna de las siguientes respuestas. A continuación, solucione el problema en función de la respuesta registrada.

Nota: Lambda trata un lote como erróneo en su totalidad cuando la función devuelve cualquiera de las siguientes respuestas.

Respuestas para una respuesta EventResponse que no es un JSON válido

return "Hello world"
return ""

Respuesta para un valor itemIdentifier vacío

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

Respuesta para un valor itemIdentifier nulo

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

Respuesta para un valor itemIdentifier con un nombre de clave incorrecto

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

Respuesta para un valor itemIdentifier con un identificador de mensaje que no existe

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

Importante: la función de Lambda debe devolver un valor JSON itemIdentifier válido.

Para solucionar los errores ReportBatchItemFailures en los que Lambda no vuelve a intentar ninguno de los lotes de mensajes parciales

Revise la respuesta parcial por lotes en el código de la función de Lambda para ver si hay alguna de las siguientes respuestas. A continuación, solucione el problema en función de la respuesta registrada.

Nota: Lambda trata un lote como correcto en su totalidad cuando la función devuelve cualquiera de las siguientes respuestas.

Respuesta para una lista batchItemFailures vacía

return {"batchItemFailures":[]}

Respuesta para una lista batchItemFailures nula

return {"batchItemFailures": None}

Respuestas para una respuesta EventResponse con un valor JSON vacío o inesperado

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

Respuestas para una respuesta EventResponse nula

return
return None

Importante: la función de Lambda debe devolver una respuesta que contenga un valor JSON "batchItemFailures" que incluya una lista de identificadores de mensajes válidos.


Información relacionada

¿Cómo puedo evitar que un mensaje de Amazon SQS invoque la función Lambda más de una vez?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años