Skip to main content

Command Palette

Search for a command to run...

Identificando ejecuciones concurrentes de lambdas sobre una cuenta con Amazon CloudWatch

Updated
3 min read
Identificando ejecuciones concurrentes de lambdas sobre una cuenta con Amazon CloudWatch

Las ejecuciones concurrentes es el número de ejecuciones simultáneas activas de una función Lambda en un momento dado.

Fuente: Concurrencia en lambda. https://docs.aws.amazon.com/lambda/latest/dg/lambda-concurrency.html

Si la concurrencia de una función alcanza el límite establecido por AWS (por defecto el límite en cada cuenta es de 1000), se limitarán las invocaciones adicionales a ese límite lo que generará solicitudes fallidas. Este límite puede incrementarse, solicitando su incremento a través de Service Quota.

Figura 1: Service Quota. Fuente AWS Console

La métrica en Amazon CloudWatch que contiene este dato a revisar se llama: ConcurrentExecutions que se calcula al multiplicar el promedio de solicitudes por segundo por la duración promedio de las solicitudes en segundos.

Concurrencia = PromSolicitudesxSeg X DuracionPromSolicitudesxSeg

Eso quiere decir que si tenemos una función que recibe 100 solicitudes por segundo y cada solicitud tarda alrededor de 300 milisegundos en completarse, la concurrencia sería de 30

Concurrencia = 100 X 0,3

Con Amazon CloudWatch podemos:

  • Seleccionar la métrica ConcurrentExecutions para ver el número de ejecuciones concurrentes activas en la cuenta o en funciones específicas.

    Figura 2: Métrica ConcurrentExecutions. Fuente AWS Console

  • Crear un gráfico que muestre la cantidad de cuántas ejecuciones concurrentes que se han ejecutado en un intervalo de tiempo dado.

Figura 3: Gráfico de ConcurrentExecutions. Fuente AWS Console

Usando Amazon CloudWatch Explorer

Con esta opción de Amazon Cloudwatch podremos rápidamente consultar varias métricas en simultáneo para un recurso en particular

Figura 4: Amazon CloudWatch Explorer. Fuente AWS Console

Figura 5: Servicios disponibles en Amazon CloudWatch Explorer. Fuente AWS Console

Figura 6: Métricas para lambda. Fuente AWS Console

En este caso hemos seleccionado el servicio de Lambda con algunas métricas claves (invocations, errors, throttles, concurrentExecutions). Ajustando el rango de fechas a consultar podemos ver rápidamente el resultado estás métricas segregadas para cada lambda de la cuenta.

Figura 6: Resultado de métricas para lambda segregadas por lambda. Fuente AWS Console

En el caso de los resultados de ConcurrentExecutions sobre todas las lambdas de una cuenta para un periodo dado observamos picos, que alcanzan el límite actual de la cuenta, mientras que otros tambien tienen picos a observar.

Figura 7: Detalle de la métrica ConcurrentExecutions segregada por lambda. Fuente AWS Console

Al identificar que lambdas son las que están consumiendo la concurrencia de la cuenta, podemos tomar acciones para evitar que vuelva a suceder como:

  • Aplicar un monitoreo activo con Amazon CloudWatch

  • Establecer alertas que notifiquen cuando se acerque al límite de concurrencia.​

  • Cada Lambda debe ser aprovisionada en la cuenta con una alarma que monitoree la métrica ConcurrentExecutions.

  • Cuando la alarma se active, se puede configurar una acción para que dispare otra Lambda que ajuste el valor de concurrencia reservada de la Lambda original.​

  • Establecer concurrencia reservada sólo para algunas funciones. lambda​

  • Desacoplar cargas de trabajo con SQS o SNS

  • Solicitar aumento de cuota en el límite de concurrencia (límite actual 1000)