Solución de problemas de asignación de orígenes de eventos en Lambda - AWS Lambda

Solución de problemas de asignación de orígenes de eventos en Lambda

Los problemas en Lambda que se relacionan con una asignación de orígenes de eventos pueden ser más complejos porque implican la depuración en varios servicios. Además, el comportamiento del origen de eventos puede variar en función del origen de eventos exacto utilizado. En esta sección se enumeran los problemas más comunes relacionados con las asignaciones de orígenes de eventos y se ofrece orientación sobre cómo identificarlos y solucionarlos.

nota

En esta sección se utiliza un origen de eventos de Amazon SQS a modo de ilustración, pero los principios se aplican a otras asignaciones de orígenes de eventos que ponen en cola mensajes para funciones de Lambda.

Identificación y administración de la limitación

En Lambda, se produce una limitación cuando se alcanza el umbral de simultaneidad de la función o de la cuenta. Considere el siguiente ejemplo, en el que hay una función de Lambda que lee mensajes de una cola de Amazon SQS. Esta función de Lambda simula invocaciones de 30 segundos y tiene un tamaño de lote de 1. Esto significa que la función únicamente procesa 1 mensaje cada 30 segundos:

const doWork = (ms) => new Promise(resolve => setTimeout(resolve, ms))

exports.handler = async (event) => {
    await doWork(30000)

}

Con un tiempo de invocación tan largo, los mensajes comienzan a llegar a la cola más rápidamente de lo que se procesan. Si la simultaneidad no reservada de la cuenta es 100, Lambda escala verticalmente hasta las 100 ejecuciones simultáneas y, a continuación, se produce la limitación. Puede ver este patrón en las métricas de CloudWatch de la función:

operaciones de depuración (figura 10)

Las métricas de CloudWatch para la función no muestran errores, pero el gráfico de Ejecuciones simultáneas muestra que se ha alcanzado la simultaneidad máxima de 100. Como resultado, el gráfico de limitaciones muestra la limitación en vigor.

Puede detectar la limitación con las alarmas de CloudWatch, así como establecer una alarma cada vez que la métrica de limitación de una función sea superior a 0. Una vez identificado el problema de limitación, existen varias opciones para solucionarlo:

  • Solicitar un aumento de simultaneidad de AWS Support en esta región.

  • Identificar los problemas de rendimiento en la función para mejorar la velocidad de procesamiento y, por lo tanto, mejorar el rendimiento.

  • Aumente el tamaño del lote de la función, de modo que cada invocación procese más mensajes.

Errores en la función de procesamiento

Si la función de procesamiento arroja errores, Lambda devuelve los mensajes a la cola SQS. Lambda evita que la función se escale para evitar errores a escala. Las siguientes métricas de SQS en CloudWatch indican un problema con el procesamiento de colas:

operaciones de depuración (figura 11)

En concreto, aumentan tanto la antigüedad del mensaje más antiguo como la cantidad de mensajes visibles, mientras que no se elimina ningún mensaje. La cola sigue aumentando, pero los mensajes no se procesan. Las métricas de CloudWatch para la función de Lambda de procesamiento también indican que hay un problema:

operaciones de depuración (figura 12)

La métrica del recuento de errores es distinta de cero y va en aumento, mientras que las ejecuciones simultáneas se han reducido y la limitación se ha detenido. Esto muestra que Lambda ha dejado de escalar verticalmente la función debido a errores. Los registros de CloudWatch de la función proporcionan detalles sobre el tipo de error.

Para resolver este problema, identifique la función causante del error y, a continuación, busque y resuelva el error. Después de corregir el error e implementar el nuevo código de la función, las métricas de CloudWatch deberían mostrar la recuperación del procesamiento:

operaciones de depuración (figura 13)

Aquí, la métrica de recuento de errores cae a cero y la métrica de tasa de éxito vuelve al 100 %. Lambda comienza a escalar verticalmente la función de nuevo, como aparece en el gráfico de Ejecuciones simultáneas.

Identificar y gestionar la contrapresión

Si un productor de eventos genera constantemente mensajes para una cola de SQS más rápido de lo que una función de Lambda puede procesarlos, se produce una contrapresión. En este caso, la supervisión de SQS debería mostrar la antigüedad del mensaje más antiguo en crecimiento lineal, junto con la cantidad aproximada de mensajes visibles. Puede detectar la contrapresión en las colas mediante las alarmas de CloudWatch.

Los pasos para resolver la contrapresión dependen de la carga de trabajo. Si el objetivo principal es mejorar la capacidad de procesamiento y el rendimiento de la función de Lambda, dispone de varias opciones:

  • Solicite un aumento de simultaneidad de AWS Support en esta región específica.

  • Aumente el tamaño del lote de la función, de modo que cada invocación procese más mensajes.