¿Por qué las fuentes de eventos asincrónicas tardan mucho en activar mi función Lambda?
Se produce un retraso cuando las fuentes de eventos asincrónicas activan mi función AWS Lambda.
Descripción breve
Al utilizar invocaciones asincrónicas con las funciones de Lambda, es posible que observe que sus eventos tardan más de lo esperado en activarse. O bien, es posible que sus eventos se envíen a la cola de mensajes fallidos (DLQ) sin que el servicio Lambda los recoja para su posterior procesamiento.
Hay varios servicios de AWS diferentes que invocan funciones de Lambda de forma asincrónica:
- Amazon Simple Storage Service (Amazon S3)
- Amazon Simple Notification Service (Amazon SNS)
- Amazon Simple Email Service (Amazon SES)
- AWS CloudFormation
- Amazon CloudWatch Logs
- Amazon CloudWatch Events
- AWS CodeCommit
- AWS Config
Solución
Retrasos en la invocación
Por lo general, es posible que se produzcan retrasos debido al método asincrónico de gestión de las solicitudes.
- Cuando se realiza una solicitud, se envía a una cola asíncrona interna. Lambda recoge las solicitudes de la cola asincrónica interna y, a continuación, las envía a la función Lambda para su posterior procesamiento. Es posible que vea un retraso en los registros de Amazon CloudWatch Logs de su función si su función Lambda presenta errores. También pueden producirse retrasos si las solicitudes se limitan a nivel de función.
- Si no hay errores ni puntos de datos de limitación a nivel de función, compruebe las métricas del nivel regional para ver si hay errores y restricciones. Si se invocan otras funciones de forma asincrónica y, a continuación, se producen errores, estas funciones se retrasan considerablemente. Por lo tanto, aunque la función no tenga puntos de datos de error o limitación, es posible que las invocaciones o solicitudes que se realicen a la función sigan retrasándose.
- Si otras funciones que se encuentran en la misma región que la función Lambda se invocan varias veces de forma asincrónica, la cola interna se congestiona. Para resolver el problema, aumente la concurrencia a nivel regional.
- Para comprobar la acumulación interna de colas,active AWS X-Ray en su función Lambda. Cuando AWS X-Ray está activado, puede utilizar la propiedad de tiempo de permanencia. Esta propiedad muestra el tiempo total que las solicitudes permanecen en la cola interna antes de que el servicio Lambda las envíe a la función Lambda para su procesamiento.
- Configure una concurrencia por función, o una concurrencia reservada, para proteger las funciones contra la acumulación de colas.
Invocación duplicada
Lambda es un servicio distribuido y se asegura de que la función se invoque al menos una vez. Sin embargo, si la función se invoca más de una vez, pueden producirse duplicados. Consulte los registros de CloudWatch para ver si hay invocaciones duplicadas.
- Se recomienda asegurarse de que la función pueda gestionar solicitudes duplicadas. Para obtener más información, consulte ¿Cómo hago que mi función Lambda sea idempotente?
- Revise los registros de CloudWatch de Lambda y compruebe los ID de solicitud de su función. En los registros, puede comprobar si los eventos duplicados tienen el mismo ID de solicitud o uno diferente. Los ID de solicitud siguen siendo los mismos durante todo el ciclo de vida de una invocación asincrónica para Lambda. Si los ID de solicitud son los mismos, compruebe si la función tiene algún punto de datos de error que haya provocado que la invocación se reintente y se duplique.
- Si los ID de solicitud son diferentes, las invocaciones duplicadas se producen en el lado del cliente.
Faltan invocaciones
Revise los registros de CloudWatch para diferenciar entre las invocaciones faltantes y las retrasadas. Para las invocaciones retrasadas, siga los pasos detallados anteriormente en la sección Invocaciones retrasadas de este artículo.
Las invocaciones faltantes se producen cuando no hay suficiente concurrencia para atender la solicitud. Si la función tiene una concurrencia reservada y la función presenta errores, la solicitud permanece mucho tiempo en la cola asincrónica. A continuación, se elimina la solicitud sin que Lambda la procese. Revisa la métrica AsyncEventsDropped para comprobar el número de eventos que se eliminaron sin ejecutar la función.
Si configuró el DLQ, compruebe el DLQ o el destino en caso de error de la solicitud. Si un evento caduca en la cola interna transcurridas seis horas, Lambda puede enviar la solicitud al DLQ sin que Lambda la procese.
Métricas para la invocación asincrónica
Para obtener más información sobre cómo revisar otras métricas de invocación asincrónica, consulte Introducción a las nuevas métricas de invocación asincrónica para AWS Lambda.
Información relacionada
Manejo de la idempotencia de las funciones Lambda con AWS Lambda Powertools
Contenido relevante
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 3 años
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 9 meses