DEV Community

camilo cabrales
camilo cabrales

Posted on

Tunea tus funciones Lambda

Las funciones Lambda tienen un tiempo limitado a 15 minutos para procesar cada solicitud. Por este motivo debemos seleccionar de manera optima la cantidad de memoria que asignamos a nuestra función.

Con el objetivo de encontrar el rendimiento optimo para nuestra función se creo un proyecto en Git - aws-lambda-power-tuning
Public
que nos va ayudar a encontrar la cantidad de memoria que requiere nuestra función para su optimo funcionamiento.

Este proyecto crea un Step Function que de acuerdo a los parámetros de memoria que le enviamos va a ejecutar la función Lambda que definamos, retornándonos los tiempos de respuesta y un consto aproximado por ejecución de cada una de los parámetros que le definimos.

En la pagina del proyecto podemos encontrar diferentes formas de realizar el despliegue de los servicios requeridos para ejecutarlo. En este caso vamos a utilizar el despliegue usando SAM como lo mencionan en la pagina - opción 2.
Nota: hay que tener Docker instalado y corriendo para poder ejecutar la plantilla de SAM.

Install the AWS SAM CLI in your local environment.

Configure your AWS credentials (requires AWS CLI installed):

$ aws configure
Clone this git repository:

$ git clone https://github.com/alexcasalboni/aws-lambda-power-tuning.git
Build the Lambda layer and any other dependencies (Docker is required):

$ cd ./aws-lambda-power-tuning
$ sam build -u
sam build -u will run SAM build using a Docker container image that provides an environment similar to that which your function would run in. SAM build in-turn looks at your AWS SAM template file for information about Lambda functions and layers in this project.

Once the build has completed you should see output that states Build Succeeded. If not there will be error messages providing guidance on what went wrong.

Deploy the application using the SAM deploy "guided" mode:

$ sam deploy -g

Enter fullscreen mode Exit fullscreen mode

En el transcurso del despliegue nos va ir solicitando algunos datos que utiliza la plantilla para su despliegue, los cuales podemos dejar los que vienen por defecto dando ENTER cuando nos los solicite.

Una vez desplegada la infraestructura, vamos a crear una función Lambda a la cual queremos hacer un tuning en la asignación de la memoria. Esta función nos ayuda a calcular el factorial de un numero grande. Se eligió este tipo de calculo ya que puede tardar varios segundos.

Crear funcion

Pegamos el código fuente y damos click en Deploy

import json
import sys
sys.set_int_max_str_digits(1000000000)

def CalcularFactorial(numero):
    resultado = 1
    for i in range(1, numero+1):
        resultado *= i
    return resultado


def lambda_handler(event, context):
    numero = 30000
    print(CalcularFactorial(numero))
Enter fullscreen mode Exit fullscreen mode

Asignar codigo

Ahora que hemos creado la función Lambda, vamos a realizar las pruebas de tuning, para esto vamos a buscar el servicio Step Functions y la función que comienza con el nombre powerTuningStateMachine.

Step Function

Damos click en el nombre y despues en Star Execution.

Star Function

Después ingresamos los parámetros que requiere la función:

{
    "lambdaARN": "arn:aws:lambda:us-east-1:385033107168:function:Factorial",
    "powerValues": [256, 512, 1024],
    "num": 50,
    "payload": {},
    "strategy": "balanced"
}

Enter fullscreen mode Exit fullscreen mode

En este caso le pasamos el arn de la función Lambda que acabamos de crear, la cantidad de memoria con la cual queremos que se ejecute, el numero de ejecuciones y la estrategia que es este caso es balanced, que sirve para encontrar la mejor relación velocidad precio por ejecución. Podemos encontrar la documentación de los parametros en este link.

Star Function 2

Ahora veamos el resultado de la ejecución:

Result 1

En esta ejecución podemos identificar que el tiempo (3 segundos) que tiene configurado por defecto la función Lambda no es suficiente para completar la tarea que debe realizar. Lo que debemos hacer es incrementar el tiempo que tiene la función Lambda para completar la tarea.
Vamos a la función Lambda y modificamos el tiempo de ejecución.

General Configuration

Definimos el tiempo a 3 minutos.

Set Time

Modificado el tiempo de ejecución vamos nuevamente a la Step Fuction y damos click en Start Execution y copiamos los parámetros anteriores.

Final Execution

Al terminar la ejecución podemos ver los resultados del análisis el cual nos indica que la cantidad de memoria que que tiene mejor relación tiempo - precio es 1024.En caso que deseemos ver los resultados de una manera mas gráfica podemos copiar el link que aparece en el output y pegarlo en un navegador y veremos una pagina como la siguiente:

Graphics Results

EL gráfico nos facilita realizar el análisis del comportamiento de la función de acuerdo a la cantidad de memoria asignada a la función Lambda.

Por ultimo si no queremos tener los servicios que se desplegaron con SAM debemos ir a CloudFormation y eliminar la plantilla para que se borren todos los servicios.

Delete Template

Me pueden encontrar en

Camilo Cabrales

Referencias

Despliegue Lambda Power Tools
Cuotas Lambda

Latest comments (0)