Solucionar problemas de ejecución en Lambda - AWS Lambda

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:

  1. Abra la consola de Service Quotas.

  2. En el panel de navegación, elija Servicios de AWS.

  3. En la lista de servicios de AWS, busque y seleccione Registros de Amazon CloudWatch.

  4. En la lista de Service Quotas, seleccione las cuotas CreateLogGroup throttle limit in transactions per second, CreateLogStream throttle limit in transactions per second y PutLogEvents 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:

Node.js

Implementar funciones Node.js de Lambda con archivos de archivo.zip

Python

Uso de archivos .zip para funciones de Lambda en Python

Ruby

Implementar funciones de Lambda de Ruby con archivos .zip

Java

Implementar funciones de Lambda Java con archivos de archivo .zip o JAR

Go

Implementar funciones de Lambda en Go con archivos .zip

C#

Crear e implementar funciones de Lambda C# con archivos de archivo .zip

PowerShell

Implemente funciones PowerShell Lambda con archivos de archivos.zip

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.