¿Por qué no es óptimo el escalamiento de mi función de Lambda con un origen de eventos de Amazon SQS?

5 minutos de lectura
0

La función de AWS Lambda para la fuente de eventos de cola de Amazon Simple Queue Service (Amazon SQS) no escala según lo esperado. Quiero configurar la simultaneidad óptima.

Solución

Nota: Cuando se configura una cola de Amazon SQS como origen de eventos, las funciones de Lambda se pueden escalar verticalmente de forma óptima hasta 300 instancias más por minuto. El número máximo de ejecuciones simultáneas para las colas estándar es de 1250. Si utilizas la asignación de orígenes de eventos FIFO (first in, first out), las funciones podrán realizar un desescalamiento horizontal simultáneo hasta alcanzar, como máximo, el número de grupos de mensajes activos.

Identificación y resolución de problemas de invocación en funciones de Lambda

Para evitar errores de escalamiento, Lambda limita el escalamiento de las funciones cuando se producen problemas de invocación. Una vez resueltos los problemas, Lambda continúa escalando la función. Para obtener más información, consulta Estrategia de retroceso para invocaciones fallidas. Para resolver los errores de invocación de funciones de Lambda, consulta Gestión de errores para un origen de eventos de SQS en Lambda y ¿Cómo puedo solucionar los errores en la función de Lambda?

Configuración de la función de Lambda con una simultaneidad óptima

Simultaneidad reservada

Si has configurado la simultaneidad reservada para una función, Lambda limitará dicha función cuando alcance el valor reservado. Las asignaciones de orígenes de eventos no incluyen la simultaneidad reservada y pueden procesar más mensajes de la cola de los que se envían a la función.

La simultaneidad mínima reservada de tu función debe ser de 1250 para las colas de SQS estándar e igual al total de grupos de mensajes activos para las colas FIFO. Se recomienda establecer la simultaneidad reservada por encima del número de grupos de mensajes en la cola FIFO. Una simultaneidad reservada menor puede provocar retrasos en el procesamiento de la cola FIFO y una limitación de la función.

Importante: Para limitar el número de invocaciones simultáneas, utiliza la configuración de la simultaneidad máxima para los orígenes de eventos de Amazon SQS en lugar de la simultaneidad reservada.

Simultaneidad predeterminada

Tu cuenta de AWS tiene una cuota de simultaneidad predeterminada de 1000 para todas las funciones de la misma cuenta y región de AWS. Las funciones escalan hasta que alcanzan la máxima simultaneidad disponible. Cuando todas las funciones utilizan el grupo de simultaneidad de 1000, Lambda limita las invocaciones.

Lambda restringe la rapidez con la que pueden escalar las funciones para que los picos repentinos de tráfico no provoquen que las funciones escalen excesivamente. Las funciones de Lambda escalan inicialmente en función de la frecuencia de escalamiento de simultaneidad. Como la frecuencia de escalamiento de simultaneidad es a nivel de función, cada función de tu cuenta se puede escalar de forma independiente de las demás funciones. Así pues, la frecuencia de escalamiento de simultaneidad difiere de la cuota de simultaneidad en el nivel de cuenta, que proporciona la cantidad total de simultaneidad disponible para las funciones.

Nota: La simultaneidad predeterminada es diferente de la simultaneidad aprovisionada. Para obtener más información, consulta Comprender la simultaneidad reservada y simultaneidad aprovisionada.

Configuración de la simultaneidad máxima

Cuando se establece la simultaneidad máxima para un origen de eventos, el valor solo se aplica a ese origen de eventos en cuestión. Los demás orígenes de eventos sin simultaneidad máxima utilizarán la cuota de simultaneidad restante de la cuenta o la simultaneidad reservada.

Puedes utilizar la configuración de simultaneidad máxima y la simultaneidad reservada conjuntamente. Se recomienda establecer la simultaneidad máxima por debajo de la simultaneidad reservada de la función para que las funciones no se limiten.

Confirmación de si hay suficientes mensajes en la cola de Amazon SQS para permitir el escalamiento de la función de Lambda

Si has configurado una cola de Amazon SQS de modo que invoque una función de Lambda, Lambda solo escalará las invocaciones cuando haya mensajes en la cola.

Si deseas utilizar Amazon CloudWatch para comprobar cuántos mensajes de la cola deben procesarse, revisa la métrica ApproximateNumberOfMessagesVisible de la cola.

Si la métrica es baja o su valor es 0, la función no podrá escalar.

Si la métrica es alta y no hay problemas de invocación, aumenta el tamaño del lote en la notificación del evento hasta que la métrica Duration no aumente. Para obtener más información sobre las métricas de Lambda, consulta Tipos de métricas.

Nota: El tamaño máximo de lote en el caso de una cola estándar de Amazon SQS es de 10 000 registros. En el caso de las colas FIFO, el tamaño máximo de lote es de 10 registros.

Confirmación de que Amazon SQS añade los mensajes a una cola

Para comprobar que Amazon SQS añade los nuevos mensajes a una cola, revisa la métrica NumberOfMessagesSent de la cola.

Confirmación de que el consumidor realiza la llamada a la API ReceiveMessage

Para comprobar que el consumidor realiza la llamada a la API ReceiveMessage, revisa la métrica NumberOfMessagesReceived de la cola.

Nota: Los picos en la métrica NumberOfEmptyReceives muestran que el consumidor realiza la llamada a la API ReceiveMessage, pero la llamada no devuelve ningún mensaje de la cola. Este problema se produce cuando no hay mensajes en la cola.

Información relacionada

Using Lambda with Amazon SQS

Managing AWS Lambda function concurrency

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 3 meses