¿Por qué la función de Lambda vuelve a intentar enviar mensajes válidos de Amazon SQS y los coloca en la cola de mensajes fallidos?

5 minutos de lectura
0

He configurado la función de AWS Lambda para procesar los mensajes de una cola de Amazon Simple Queue Service (Amazon SQS). Algunos de los mensajes válidos de Amazon SQS se reciben varias veces hasta el maxReceiveCount y terminan en la cola de mensajes fallidos.

Descripción breve

Si la función de Lambda está limitada, devuelve un error o no responde al leer un lote de mensajes de Amazon SQS, los mensajes vuelven a la cola. Una vez transcurrido el ](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html)tiempo de espera de visibilidad[, la función de Lambda vuelve a recibir el lote de mensajes. Si la función no procesa los mensajes válidos varias veces, Amazon SQS los envía a su cola de mensajes fallidos, si ha configurado una.

Para evitar que los mensajes válidos se coloquen en una cola de mensajes fallidos, el código de la función debe ser idempotente y capaz de gestionar los mensajes varias veces. Para obtener más información, consulte ¿Cómo evito que un mensaje de Amazon SQS invoque la función de Lambda más de una vez?

Solución

Verificar que el código de la función de Lambda sea idempotente

Para conocer las prácticas recomendadas de idempotencia y ejemplos de lógica de funciones, consulte ¿Cómo hago para que mi función de Lambda sea idempotente?

Compruebe que el tiempo de espera de visibilidad de su cola de Amazon SQS sea al menos seis veces mayor que la configuración de tiempo de espera de la función de Lambda

Establezca que el ](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html)tiempo de espera de visibilidad[ de la cola de origen sea, como mínimo, seis veces mayor que el tiempo de espera de la función. El tiempo adicional permite a la función volver a intentar procesar un lote si la función está limitada mientras se procesa un lote anterior.

Para obtener más información, consulte Configuración del tiempo de espera de visibilidad en la Guía para desarrolladores de Amazon SQS.

Nota: Si la función no recibe mensajes porque el tiempo de espera de visibilidad de la cola no es lo suficientemente largo, los mensajes no se registrarán en los Registros de Amazon CloudWatch.

Comprobar que el atributo maxReceiveCount esté establecido como mínimo en cinco en la política de reenvío de la cola de origen

Establezca el maxReceiveCount de la política de reenvío de la cola de origen, como mínimo, en cinco. Si la función devuelve un error o no se puede invocar porque tiene la simultaneidad máxima, es posible que el procesamiento se lleve a cabo correctamente con más intentos. Un maxReceiveCount de al menos cinco concede a tus mensajes más posibilidades de procesarse antes de que se envíen a la cola de mensajes fallidos.

Para actualizar el límite máximo de configuración de simultaneidad, consulte Configuración de la simultaneidad máxima para los orígenes de eventos de Amazon SQS.

Para obtener más información, consulte ¿Cómo funcionan las colas de mensajes fallidos? y Cómo evitar el procesamiento incoherente de los mensajes en la Guía para desarrolladores de Amazon SQS.

Comprobar la función de Lambda para verificar la limitación y la simultaneidad reservada

Las funciones de Lambda a veces se limitan para proteger los recursos y aplicaciones posteriores. Aunque Lambda se escala automáticamente para adaptarse al tráfico entrante, la función puede seguir limitándose por varios motivos.

Utilice la consola de Lambda para comprobar la configuración de simultaneidad reservada. Si la simultaneidad reservada no está configurada, la función utiliza la simultaneidad no reservada. Cuando las invocaciones con funciones superan la simultaneidad no reservada, se produce una limitación.

Nota: Si ha configurado una función con una simultaneidad reservada de cero, la función está limitada porque no puede procesar ningún evento. Asegúrese de aumentar el valor a un número mayor que cero.

Si otras funciones de la misma región de AWS utilizan el límite de simultaneidad, se puede producir una limitación. Las funciones de Lambda que experimentan una limitación envían los mensajes de SQS a la cola de mensajes fallidos.

Evitar volver a procesar todos los mensajes de SQS en un lote fallido

Todos los mensajes de SQS son visibles en la cola de mensajes fallidos de las funciones de Lambda que detectan errores al procesar un lote, lo que abarca los mensajes que Lambda ha procesado correctamente. A continuación, Lambda intenta procesar de nuevo todo el lote de mensajes de SQS.

Para evitar volver a procesar todos los mensajes de SQS de un lote fallido, configure la asignación de orígenes de eventos con el valor ReportBatchItemFailures en la lista FunctionResponseTypes. Esto permite que la función devuelva un éxito parcial y que se reduzca el número de reintentos. Para obtener más información, consulte Implementación de respuestas parciales por lotes.

Identificar y resolver cualquier error que devuelva la función de Lambda

Siga las instrucciones que se indican en ¿Cómo soluciono los problemas de la función de Lambda? La función elimina automáticamente los mensajes de la cola, pero solo si no devuelve ningún error.

Información relacionada

¿Cómo solicito un aumento del límite de concurrencia para mi función de Lambda?

¿Cómo soluciono los problemas de limitación de la función de Lambda con errores «Rate exceeded» y 429 «TooManyRequestsException»?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año