Tiempo de ejecución de Python para instancias administradas de Lambda - AWS Lambda

Tiempo de ejecución de Python para instancias administradas de Lambda

El tiempo de ejecución de Lambda utiliza varios procesos de Python para gestionar las solicitudes simultáneas. Cada solicitud simultánea se ejecuta en un proceso independiente con su propio espacio de memoria e inicialización. Cada proceso gestiona una solicitud a la vez, de forma sincrónica. Los procesos no comparten memoria directamente, por lo que las variables globales, las cachés a nivel de módulo y los objetos individuales están aislados entre las solicitudes simultáneas.

Configuración de concurrencia

El número máximo de solicitudes simultáneas que envía Lambda a cada entorno de ejecución se controla mediante el ajuste PerExecutionEnvironmentMaxConcurrency de la configuración de la función. Se trata de una configuración opcional y el valor predeterminado varía en función del tiempo de ejecución. Para los tiempos de ejecución de Python, el valor predeterminado es de 16 solicitudes simultáneas por vCPU, o puede configurar su propio valor. Este valor también determina el número de procesos utilizados por el tiempo de ejecución de Python. Lambda ajusta automáticamente el número de solicitudes simultáneas hasta el máximo configurado en función de la capacidad de cada entorno de ejecución para absorber esas solicitudes.

importante

El uso de la concurrencia basada en procesos significa que cada proceso de trabajo en tiempo de ejecución realiza su propia inicialización. El uso total de la memoria es igual a la memoria por proceso multiplicada por el número de procesos simultáneos. Si carga bibliotecas o conjuntos de datos de gran tamaño y tiene una concurrencia elevada, tendrá un gran consumo de memoria. Según su carga de trabajo, es posible que necesite ajustar la proporción de CPU con respecto a la memoria o utilizar una configuración de concurrencia más baja para evitar sobrepasar la memoria disponible. Puede utilizar la métrica de MemoryUtilization de CloudWatch para hacer un seguimiento del consumo de memoria.

Creación de funciones para la concurrencia múltiple

Debido al modelo de concurrencia múltiple basado en procesos, las funciones de las instancias administradas de Lambda que utilizan tiempos de ejecución de Python no acceden a los recursos en memoria de forma simultánea desde varias invocaciones. No es necesario aplicar prácticas de codificación para garantizar la concurrencia en memoria.

Directorio /tmp compartido

El directorio /tmp se comparte entre todas las solicitudes simultáneas del entorno de ejecución. Las escrituras simultáneas en el mismo archivo pueden dañar los datos, por ejemplo, si otro proceso sobrescribe el archivo. Para solucionar este problema, implemente el bloqueo de archivos para los archivos compartidos o utilice nombres de archivo únicos por proceso o por solicitud para evitar conflictos. Recuerde limpiar los archivos innecesarios para no agotar el espacio disponible.

Registro

El intercalado de registros (las entradas de registro de diferentes solicitudes se intercalan en los registros) es normal en los sistemas simultáneos múltiples.

Las funciones que utilizan instancias administradas de Lambda utilizan siempre el formato de registro JSON estructurado introducido con los controles de registro avanzados. Este formato incluye el requestId, lo que permite correlacionar las entradas de registro con una sola solicitud. Cuando utiliza el módulo de logging de la biblioteca estándar de Python en Lambda, el requestId se incluye automáticamente en cada entrada de registro. Para obtener más información, consulte Uso de los controles de registro avanzados de Lambda con Python.

El contexto de la solicitud

Utilice context.aws_request_id para acceder al identificador de solicitud de la solicitud actual.

Con los tiempos de ejecución de Python, puede usar la variable de entorno _X_AMZN_TRACE_ID para acceder al identificador de seguimiento de X-Ray con instancias administradas de Lambda. El identificador de seguimiento de X-Ray se propaga automáticamente cuando se utiliza AWS SDK.

Inicialización y apagado

La inicialización de la función se produce una vez por proceso. Es posible que vea entradas de registro repetidas si su función emite registros durante la inicialización.

En el caso de las funciones de Lambda con extensiones, el entorno de ejecución emite una señal SIGTERM durante el cierre. Las extensiones utilizan esta señal para desencadenar tareas de limpieza, como vaciar los búferes. Puede suscribirse a los eventos SIGTERM para desencadenar tareas de limpieza de funciones, como cerrar las conexiones a las bases de datos. Para obtener más información sobre el ciclo de vida del entorno de ejecución, consulte Descripción del ciclo de vida del entorno de ejecución de Lambda.

Versiones de dependencias

Las instancias administradas de Lambda requieren las siguientes versiones de paquete como mínimo:

  • Powertools para AWS Lambda (Python): versión 3.23.0 o posterior

Powertools para AWS Lambda (Python)

Powertools para AWS Lambda (Python) es compatible con las instancias administradas de Lambda y proporciona utilidades para el registro, el seguimiento, las métricas y mucho más. Para obtener más información, consulte Powertools para AWS Lambda (Python).

Siguientes pasos