Solución de problemas de las instancias administradas de Lambda - AWS Lambda

Solución de problemas de las instancias administradas de Lambda

Problemas de limitación y escalado

Tasas elevadas de error durante el escalado vertical

Problema: se producen errores de limitación (HTTP 429) cuando el tráfico aumenta rápidamente.

Causa: las instancias administradas de Lambda se escalan de forma asíncrona en función del uso de los recursos de la CPU y de la saturación de la concurrencia múltiple. Si el tráfico más que se duplica en 5 minutos, es posible que experimente limitaciones a medida que Lambda escala verticalmente las instancias y los entornos de ejecución para satisfacer la demanda.

Solución:

  • Ajuste el objetivo de utilización de los recursos: si su carga de trabajo tiene patrones de tráfico predecibles, establezca un objetivo de utilización de los recursos más bajo para mantener un margen de maniobra adicional ante las ampliaciones de tráfico.

  • Capacidad de precalentamiento: si el tráfico se incrementa de forma planificada, aumente el tráfico gradualmente durante un período más largo para que el escalado pueda mantener el ritmo.

  • Supervise las métricas de escalado: haga un seguimiento de las métricas de error de limitación para comprender el motivo de los problemas de limitación y escalado de la capacidad.

  • Revise la configuración de la función: asegúrese de que la memoria de las funciones y la configuración de la vCPU admitan varias ejecuciones simultáneas. Aumente la memoria de las funciones o la asignación de vCPU, si es necesario.

Reducción vertical lenta

Problema: las instancias tardan mucho tiempo en reducirse verticalmente una vez que disminuye el tráfico.

Causa: las instancias administradas de Lambda se reducen verticalmente de forma gradual para mantener la disponibilidad y evitar cambios rápidos de capacidad que podrían afectar el rendimiento.

Solución:

Este es el comportamiento esperado. Lambda reduce verticalmente las instancias de forma conservadora para garantizar la estabilidad. Supervise las métricas de CloudWatch para realizar un seguimiento del número de instancias en ejecución.

Problemas de concurrencia

Los entornos de ejecución con poca concurrencia experimentan limitaciones.

Problema: sus funciones presentan limitaciones a pesar de tener capacidad disponible.

Causa: los entornos de ejecución con una concurrencia máxima muy baja pueden tener dificultades para lograr un escalado eficaz. Las instancias administradas de Lambda están diseñadas para aplicaciones simultáneas múltiples.

Solución:

  • Aumente la concurrencia máxima: si las invocaciones de sus funciones utilizan muy poca CPU, aumente la configuración de concurrencia máxima a 64 por vCPU.

  • Optimice el código de la función: revise el código de la función para reducir el consumo de CPU por invocación, lo que permitirá una mayor concurrencia.

  • Ajuste la memoria de la función y la vCPU: asegúrese de que su función tenga recursos suficientes para gestionar varias invocaciones simultáneas.

Problemas de seguridad de los subprocesos (tiempo de ejecución de Java)

Problema: la función de Java produce resultados incorrectos o experimenta condiciones de carrera bajo carga.

Causa: varios subprocesos ejecutan el método del controlador simultáneamente y el estado compartido no es seguro para subprocesos.

Solución:

  • Utilice AtomicInteger o AtomicLong para contadores en lugar de tipos primitivos.

  • Reemplace HashMap por ConcurrentHashMap

  • Utilice Collections.synchronizedList() para encapsular ArrayList.

  • Utilice ThreadLocal para el estado específico de una solicitud.

  • Acceda a los identificadores de seguimiento desde el objeto de contexto de Lambda, no desde las variables de entorno.

Para obtener una guía detallada, consulte la documentación sobre el tiempo de ejecución de Java para instancias administradas de Lambda.

Problemas de aislamiento de estados (tiempo de ejecución de Node.js)

Problema: la función de Node.js devuelve datos de diferentes solicitudes o los datos están dañados.

Causa: las variables globales se comparten en las invocaciones simultáneas del mismo subproceso de trabajo. Cuando las operaciones asíncronas ceden el control, otras invocaciones pueden modificar el estado compartido.

Solución:

  • Instale y utilice @aws/lambda-invoke-store para todos los estados específicos de solicitud.

  • Sustituya las variables globales por InvokeStore.set() y InvokeStore.get().

  • Utilice nombres de archivo únicos en /tmp junto con los identificadores de solicitud.

  • Acceda a los identificadores de seguimiento mediante InvokeStore.getXRayTraceId() en lugar de utilizar variables de entorno.

Para obtener una guía detallada, consulte la documentación sobre el tiempo de ejecución de Node.js para instancias administradas de Lambda.

Conflictos de archivos (tiempo de ejecución de Python)

Problema: la función de Python lee datos incorrectos de los archivos en /tmp.

Causa: varios procesos comparten el directorio /tmp. Las escrituras simultáneas en el mismo archivo pueden dañar los datos.

Solución:

  • Utilice nombres de archivo únicos con los identificadores de solicitud: /tmp/request_{context.request_id}.txt.

  • Utilice el bloqueo de archivos con fcntl.flock() para los archivos compartidos.

  • Limpie los archivos temporales con os.remove() después de su uso.

Para obtener una guía detallada, consulte la documentación sobre el tiempo de ejecución de Python para instancias administradas de Lambda.

Problemas de rendimiento

Utilización elevada de memoria

Problema: sus funciones experimentan un uso elevado de memoria o errores de memoria insuficiente.

Causa: cada solicitud simultánea en Python se ejecuta en un proceso independiente con su propio espacio de memoria. El uso total de memoria es igual a la memoria por proceso multiplicada por los procesos simultáneos.

Solución:

  • Supervise la métrica de MemoryUtilization en CloudWatch.

  • Reduzca la configuración de MaxConcurrency si el uso de memoria se acerca al límite de memoria de la función.

  • Aumente la asignación de memoria de las funciones para admitir una mayor concurrencia.

  • Optimice el uso de la memoria; para ello, cargue los datos bajo demanda en lugar de durante la inicialización.

Rendimiento incoherente

Problema: el rendimiento de las funciones varía considerablemente entre las invocaciones.

Causa: Lambda puede seleccionar distintos tipos de instancias en función de la disponibilidad, o las funciones pueden ejecutarse en instancias con una disponibilidad de recursos variable.

Solución:

  • Especifique los tipos de instancia permitidos: si tiene requisitos de rendimiento específicos, configure los tipos de instancias permitidos en su proveedor de capacidad para limitar los tipos de instancias que Lambda puede seleccionar.

  • Supervise las métricas a nivel de instancia: realice un seguimiento de CPUUtilization y MemoryUtilization a nivel del proveedor de capacidad, para identificar las limitaciones de los recursos.

  • Revise las métricas de capacidad: compruebe vCPUAvailable y MemoryAvailable para asegurarse de que haya suficientes recursos disponibles en sus instancias.

Problemas con los proveedores de capacidad

La versión de la función no se ACTIVA.

Problema: la versión de la función permanece en estado pendiente tras su publicación.

Causa: Lambda está en proceso de lanzamiento de instancias administradas e inicia entornos de ejecución. Este proceso lleva tiempo, especialmente en el caso de la primera versión de la función en un nuevo proveedor de capacidad.

Solución:

Espere a que Lambda complete el proceso de inicialización. Lambda lanza tres instancias de forma predeterminada para garantizar la resiliencia de la zona de disponibilidad e inicia tres entornos de ejecución antes de marcar la versión de la función como ACTIVA. Esta operación suele tardar varios minutos.

No se puede eliminar el proveedor de capacidad.

Problema: recibe un error cuando intenta eliminar un proveedor de capacidad.

Causa: no puede eliminar un proveedor de capacidad que tenga versiones de funciones asociadas.

Solución:

  1. Identifique todas las versiones de funciones mediante el proveedor de capacidad con la API de ListFunctionVersionsByCapacityProvider.

  2. Elimine o actualice esas versiones de funciones para eliminar la asociación con los proveedores de capacidad.

  3. Reintente eliminar el proveedor de capacidad.

Mensajes de error genéricos durante la publicación de la función

Problema: cuando publica funciones, aparecen mensajes de error genéricos como «Se ha producido un error interno durante la publicación».

Solución:

  • Compruebe los permisos de IAM: asegúrese de tener el permiso lambda:PassCapacityProvider para el proveedor de capacidad que intenta utilizar.

  • Verifique la configuración del proveedor de capacidad: confirme que su proveedor de capacidad esté en estado ACTIVO mediante la API de GetCapacityProvider.

  • Revise la configuración de la VPC: asegúrese de que las subredes y los grupos de seguridad especificados en su proveedor de capacidad estén configurados correctamente y sean accesibles.

  • Compruebe los registros de AWS CloudTrail: revise los registros de CloudTrail para obtener información detallada sobre los errores de la operación fallida.

Problemas de supervisión y observabilidad

Métricas de CloudWatch faltantes

Problema: no ve las métricas esperadas en CloudWatch para su proveedor de capacidad o sus funciones.

Causa: las métricas se publican a intervalos de 5 minutos. Es posible que los nuevos proveedores de capacidad o funciones no dispongan de métricas de forma inmediata.

Solución:

Espere al menos de 5 a 10 minutos después de publicar la versión de una función antes de esperar que las métricas aparezcan en CloudWatch. Compruebe que busca el espacio de nombres (AWS/Lambda) y las dimensiones (CapacityProviderName, FunctionName o InstanceType) correctos.

No se pueden encontrar los registros de CloudWatch.

Problema: la función se ejecuta correctamente, pero no puede encontrar los registros en Registros de CloudWatch.

Causa: las instancias administradas de Lambda se ejecutan en la VPC y requieren conectividad de red para enviar los registros a Registros de CloudWatch. Sin una configuración de conectividad de VPC adecuada, sus funciones no pueden llegar al punto de conexión del servicio Registros de CloudWatch.

Solución:

Configure la conectividad de la VPC para permitir que sus funciones envíen registros a Registros de CloudWatch. Tiene tres opciones:

Opción 1: punto de conexión de VPC para Registros de CloudWatch (recomendado para producción)

  1. Abra la consola de Amazon VPC en console.aws.amazon.com/vpc/.

  2. En el panel de navegación, elija Puntos de conexión.

  3. Elija Crear punto de conexión.

  4. En Service category (Categoría de servicios), elija AWSServices (Servicios de AWC).

  5. En Nombre del servicio, seleccione com.amazonaws.region.logs (sustituya la region por su región de AWS).

  6. En VPC, seleccione la VPC utilizada por el proveedor de capacidad.

  7. En Subredes, seleccione las subredes en las que quiere crear las interfaces de red de punto de conexión. Para lograr un mayor nivel de disponibilidad, seleccione subredes en varias zonas de disponibilidad.

  8. En Grupos de seguridad, seleccione los grupos de seguridad que permitan el tráfico HTTPS entrante (puerto 443) desde el grupo de seguridad de su función.

  9. Habilite DNS privado para el punto de conexión.

  10. Seleccione Crear punto de conexión.

Opción 2: subred pública con puerta de enlace de Internet

Si su proveedor de capacidad utiliza subredes públicas, asegúrese de lo siguiente:

  1. La puerta de enlace de Internet está asociada a su VPC.

  2. La tabla de enrutamiento dirige el tráfico de 0.0.0.0/0 a la puerta de enlace de Internet.

  3. Los grupos de seguridad permiten el tráfico HTTPS saliente en el puerto 443.

Opción 3: subred privada con puerta de enlace NAT

Si su proveedor de capacidad utiliza subredes privadas, asegúrese de lo siguiente:

  1. Existe una puerta de enlace NAT en una subred pública.

  2. La tabla de enrutamiento de la subred privada enruta el tráfico de 0.0.0.0/0 hacia la puerta de enlace NAT.

  3. La tabla de enrutamiento de la subred pública enruta el tráfico de 0.0.0.0/0 hacia una puerta de enlace de Internet.

  4. Los grupos de seguridad permiten el tráfico HTTPS saliente en el puerto 443.

Para obtener una guía detallada sobre las opciones de conectividad de la VPC, consulte Conectividad de VPC para instancias administradas de Lambda.

Dificultad para correlacionar los registros de solicitudes simultáneas

Problema: los registros de las distintas solicitudes están intercalados, lo que dificulta el seguimiento de las solicitudes individuales.

Causa: el intercalado de registros es lo esperado y es un comportamiento estándar en los sistemas de concurrencia múltiple.

Solución:

  • Utilice un registro estructurado con formato JSON: incluya el identificador de solicitud en todas las declaraciones de registro.

  • Java: utilice Log4j con ThreadContext para incluir automáticamente el identificador de solicitud.

  • Node.js: utilice el console.log() con el formato JSON e incluya InvokeStore.getRequestId().

  • Python: utilice el módulo de registro estándar con formato JSON e incluya el context.request_id.

Para obtener una guía detallada, consulte las páginas de documentación específicas de los tiempos de ejecución.

Cómo obtener ayuda adicional

Si sigue teniendo problemas después de probar estas soluciones, pruebe lo siguiente:

  1. Revise las métricas de CloudWatch: compruebe las métricas del proveedor de capacidad y del entorno de ejecución para identificar las limitaciones de recursos o los problemas de escalado.

  2. Compruebe los registros de AWS CloudTrail: revise los registros de CloudTrail para obtener información detallada sobre las llamadas a la API y los errores.

  3. Póngase en contacto con el servicio de asistencia de AWS: si no puede resolver el problema, póngase en contacto con el servicio de asistencia de AWS con los detalles de la configuración del proveedor de capacidad, la configuración de las funciones y los mensajes de error específicos que aparecen.

Siguientes pasos