Solucionar problemas de ejecución en Lambda
Cuando el tiempo de ejecución de Lambda ejecuta el código de la función, es posible que el evento se procese en una instancia de la función que ha estado procesando eventos durante algún tiempo, o que requiera que se inicialice una nueva instancia. Pueden producirse errores durante la inicialización de la función, cuando el código de controlador procesa el evento o cuando la función devuelve (o no devuelve) una respuesta.
Los errores de ejecución de funciones pueden deberse a problemas con el código, la configuración de funciones, los recursos descendentes o los permisos. Si invoca su función directamente, verá errores de función en la respuesta de Lambda. Si invoca la función de forma asíncrona, con una asignación de orígenes de eventos o a través de otro servicio, es posible que encuentre errores en los registros, una cola de mensajes fallidos o un destino en caso de error. Las opciones de manejo de errores y el comportamiento de reintento varían en función de cómo invoque la función y del tipo de error.
Cuando el código de función o el tiempo de ejecución de Lambda devuelven un error, el código de estado en la respuesta de Lambda es 200 OK. La presencia de un error en la respuesta se indica mediante un encabezado llamado X-Amz-Function-Error
. Los códigos de estado de las series 400 y 500 están reservados para errores de invocación.
Lambda: la ejecución lleva demasiado tiempo
Problema: la ejecución de la función tarda demasiado tiempo.
Si el código tarda mucho más en ejecutarse en Lambda que en el equipo local, puede estar limitado por la memoria o la potencia de procesamiento disponibles para la función. Configure la función con memoria adicional para aumentar la memoria y la CPU.
Lambda: los registros o rastros no aparecen
Problema: los registros no aparecen en los Registros de CloudWatch.
Problema: los registros de seguimiento no aparecen en AWS X-Ray.
La función necesita permiso para llamar a los Registros de CloudWatch y a X-Ray. Actualice su rol de ejecución para concederle permiso. Añada las siguientes políticas administradas para habilitar los registros y el seguimiento.
-
AWSLambdaBasicExecutionRole
-
AWSXRayDaemonWriteAccess
Cuando agregue permisos a su función, actualice también su código o configuración. Esto obliga a las instancias en ejecución de su función, cuyas credenciales han expirado, a detenerse y ser sustituidas.
nota
Los registros pueden tardar de 5 a 10 minutos en aparecer después de una invocación de la función.
Lambda: no aparecen todos los registros de mi función
Problema: faltan registros de funciones en Registros de CloudWatch, aunque mis permisos son correctos
Si su Cuenta de AWS alcanza los límites de cuota de Registros de CloudWatch, CloudWatch limita el registro de funciones. Cuando esto sucede, es posible que algunos de los registros generados por sus funciones no aparezcan en los Registros de CloudWatch.
Si su función genera registros a una velocidad demasiado alta para que Lambda los procese, los resultados de los registros podrían no aparecer en Registros de CloudWatch. Cuando Lambda no puede enviar registros a CloudWatch a la velocidad a la que su función los produce, Lambda elimina los registros para evitar que la ejecución de la función se ralentice. Podrá observar de manera constante los registros descartados cuando el rendimiento del registro supere los 2 MB/s para un solo flujo de registro.
Si la función está configurada para usar registros con formato JSON, Lambda intenta enviar un evento logsDropped a los registros de CloudWatch cuando los descarta. Sin embargo, cuando CloudWatch limita el registro de la función, es posible que este evento no llegue a los registros de CloudWatch, por lo que no siempre verá un registro cuando Lambda los descarte.
Para comprobar si su Cuenta de AWS alcanzó su límite de cuota de los Registros de CloudWatch, haga lo siguiente:
-
Abra la consola de Service Quotas
. -
En el panel de navegación, elija Servicios de AWS.
-
En la lista de servicios de AWS, busque y seleccione Registros de Amazon CloudWatch.
-
En la lista de Service Quotas, seleccione las cuotas
CreateLogGroup throttle limit in transactions per second
,CreateLogStream throttle limit in transactions per second
yPutLogEvents throttle limit in transactions per second
para ver su utilización.
También puede configurar alarmas de CloudWatch para que le avisen cuando el uso de su cuenta supere el límite que especifique para estas cuotas. Consulte Creación de una alarma de CloudWatch basada en un umbral estático para aprender más.
Si los límites de cuota predeterminados de Registros de CloudWatch no son suficientes para su caso, puede solicitar un aumento de cuota.
Lambda: la función regresa antes de que finalice la ejecución
Problema: (Node.js) La función se devuelve antes de que el código termine de ejecutarse
Muchas bibliotecas, incluido el AWS SDK, funcionan de forma asíncrona. Cuando realiza una llamada de red o lleva a cabo otra operación que requiere esperar una respuesta, las bibliotecas devuelven un objeto denominado promesa que realiza un seguimiento del progreso de la operación en segundo plano.
Para esperar a que la promesa se resuelva en una respuesta, utilice la palabra clave await
. Esto bloquea la ejecución de su código de controlador hasta que la promesa se resuelve en un objeto que contiene la respuesta. Si no necesita usar los datos de la respuesta en el código, puede devolver la promesa directamente al tiempo de ejecución.
Algunas bibliotecas no devuelven promesas, pero se pueden envolver en código que sí lo hace. Para obtener más información, consulte Definir el controlador de las funciones de Lambda en Node.js.
AWS SDK: versiones y actualizaciones
Problema: El SDK de AWS incluido en el tiempo de ejecución no es la versión más reciente
Problema: el AWS SDK incluido en el tiempo de ejecución se actualiza en forma automática
Los tiempos de ejecución de los lenguajes de scripting incluyen el AWS SDK y se actualizan de manera periódica a la versión más reciente. La versión actual de cada tiempo de ejecución se muestra en la página de tiempos de ejecución. Para utilizar una versión más reciente del AWS SDK o para bloquear las funciones a una versión específica, puede agrupar la biblioteca con el código de función o crear una capa de Lambda. Para obtener información detallada sobre la creación de un paquete de implementación con dependencias, consulte los temas siguientes:
Python: las bibliotecas se cargan de manera incorrecta
Problema: (Python) algunas bibliotecas no se cargan de manera correcta desde el paquete de implementación
Las bibliotecas con módulos de extensión escritos en C o C++ deben compilarse en un entorno con la misma arquitectura de procesador que Lambda (Amazon Linux). Para obtener más información, consulte Uso de archivos .zip para funciones de Lambda en Python.
Java: su función tarda más en procesar los eventos después de actualizar a Java 17 desde Java 11
Problema: (Java) su función tarda más en procesar los eventos después de actualizar a Java 17 desde Java 11
Ajuste el compilador con el parámetro JAVA_TOOL_OPTIONS
. Los tiempos de ejecución de Lambda para Java 17 y versiones posteriores de Java cambian las opciones predeterminadas del compilador. El cambio mejora los tiempos de arranque en frío para las funciones de corta duración, pero el comportamiento anterior se adapta mejor a las funciones de computación intensiva y de ejecución prolongada. Establezca JAVA_TOOL_OPTIONS
en -XX:-TieredCompilation
para revertir al comportamiento de Java 11. Para obtener más información sobre el parámetro JAVA_TOOL_OPTIONS
, consulte Cómo entender la variable de entorno JAVA_TOOL_OPTIONS.