Rendimiento de AWS Lambda: JavaScript vs Python vs Golang

¿Qué lenguaje se debe utilizar para AWS Lambda?

Índice

Podemos escribir una función lambda para la implementación en AWS en varios idiomas. Comparemos el rendimiento de funciones (casi vacías) escritas en JavaScript, Python y Golang…

Logo de la función AWS Lambda

TL;DR

En resumen:

Idioma Duración facturada de calentamiento Duración facturada Tamaño de memoria Memoria máxima utilizada
Python 197 ms 2 ms 128 MB 32 MB
Python S3 516 ms 35 ms 128 MB 77 MB
JavaScript 2 ms 2 ms 128 MB 63 MB
JavaScript S3 120 ms 72 ms 128 MB 89 MB
Golang 11 ms 1 ms 128 MB 20 MB
Golang S3 30 ms 29 ms 128 MB 38 MB
  • Python tiene el tiempo de calentamiento más largo en 128 GB de RAM,
  • JavaScript es el más lento en general
  • Golang es el mejor de los tres, pero no significativamente

Una opción interesante es acelerar la función lambda de Python aumentando la memoria, y al mismo tiempo el CPU. Solo reducirá el tiempo de calentamiento, supongo. Llamar a S3 no se volverá menos latente.

En la prueba sintética de números primos de AWS - el costo de ejecutar una lambda de Python es el mismo que usar 128 MB y 512 MB de límite de RAM, y el rendimiento de la configuración de 512 MB es significativamente más rápido.

https://docs.aws.amazon.com/lambda/latest/operatorguide/computing-power.html

¿Qué es el AWS SAM

Estamos usando SAM para probar diferentes funciones lambda aquí.

AWS SAM es un Modelo de Aplicación Serverless.

El proyecto AWS SAM incluye la plantilla AWS SAM y el código de la función. La plantilla SAM describe cómo desplegar, ejecutar y probar la función lambda, permisos y otros parámetros importantes para crear el stack de CloudFormation.

Para usarlo necesitamos aws cli y sam cli.

Instalar AWS cli

Cómo hacerlo localmente: Instalar AWS CLI en Reinstall linux doc

O en el sitio de AWS: https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html

Instalar SAM cli

Básicamente - Descargar el instalador zip de SAM cli desde el sitio de AWS, descomprimir y instalar

wget https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-x86_64.zip
unzip aws-sam-cli-linux-x86_64.zip -d sam-installation
sudo ./sam-installation/install

# verificar que sam está instalado
sam --version

Limpiar los archivos del instalador

rm -rf sam-installation
rm aws-sam-cli-linux-x86_64.zip

Crear las funciones lambda

Llamando tres veces al script

sam init

y seleccionando cada vez la plantilla hello-world, pero con diferentes idiomas, creamos 3 aplicaciones sam

Función lambda basada en Python 3.12

la salida de sam init:

    -----------------------
    Generando aplicación:
    -----------------------
    Nombre: t1-py
    Entorno de ejecución: python3.12
    Arquitecturas: x86_64
    Administrador de dependencias: pip
    Plantilla de aplicación: hello-world
    Directorio de salida: .
    Archivo de configuración: t1-py/samconfig.toml
    
    Los pasos siguientes se pueden encontrar en el archivo README en t1-py/README.md
        

Comandos que puedes usar a continuación
=========================
[*] Crear pipeline: cd t1-py && sam pipeline init --bootstrap
[*] Validar plantilla SAM: cd t1-py && sam validate
[*] Probar función en la nube: cd t1-py && sam sync --stack-name {stack-name} --watch

Función lambda basada en JavaScript y nodejs20.x

la salida de sam init:

    -----------------------
    Generando aplicación:
    -----------------------
    Nombre: t2-js
    Entorno de ejecución: nodejs20.x
    Arquitecturas: x86_64
    Administrador de dependencias: npm
    Plantilla de aplicación: hello-world
    Directorio de salida: .
    Archivo de configuración: t2-js/samconfig.toml
    
    Los pasos siguientes se pueden encontrar en el archivo README en t2-js/README.md
...

Función lambda basada en Golang (imagen aws al2023)

la salida de sam init:

    -----------------------
    Generando aplicación:
    -----------------------
    Nombre: t3-go
    Entorno de ejecución: go (provided.al2023)
    Arquitecturas: x86_64
    Administrador de dependencias: mod
    Plantilla de aplicación: hello-world
    Directorio de salida: .
    Archivo de configuración: t3-go/samconfig.toml
    
    Los pasos siguientes se pueden encontrar en el archivo README en t3-go/README.md

Construir, probar, desplegar y ejecutar - Función lambda basada en Python

probar localmente

sam build --use-container

la salida muestra al final:

Comandos que puedes usar a continuación
=========================
[*] Validar plantilla SAM: sam validate
[*] Invocar función: sam local invoke
[*] Probar función en la nube: sam sync --stack-name {{stack-name}} --watch
[*] Desplegar: sam deploy --guided

después de ejecutar tres veces

sam local invoke

la salida que vemos es:

REPORT RequestId: 3b36575a-629d-40ba-adb7-018bdb8cae63  Init Duration: 0.09 ms  Duration: 46.95 ms      Billed Duration: 47 ms  Memory Size: 128 MB     Max Memory Used: 128 MB
...
REPORT RequestId: e1233b8a-99c6-49d9-ab91-f02408a5ec6f  Init Duration: 0.07 ms  Duration: 44.56 ms      Billed Duration: 45 ms  Memory Size: 128 MB     Max Memory Used: 128 MB
...
REPORT RequestId: 34772494-39ff-457d-a1c1-16cd5e177b42  Init Duration: 0.02 ms  Duration: 26.35 ms      Billed Duration: 27 ms  Memory Size: 128 MB     Max Memory Used: 128 MB

si añadimos una llamada de lectura a S3, la salida será diferente

...
REPORT RequestId: 158b806c-852d-4f6b-ab28-cdd6e0868fa1  Init Duration: 0.02 ms  Duration: 675.64 ms     Billed Duration: 676 ms Memory Size: 128 MB     Max Memory Used: 128 MB
...
REPORT RequestId: d4cc689c-f944-49fa-9254-555266816b97  Init Duration: 0.79 ms  Duration: 465.80 ms     Billed Duration: 466 ms Memory Size: 128 MB     Max Memory Used: 128 MB
...
REPORT RequestId: b8d30096-cd93-4787-84d7-e8f52d7e2e13  Init Duration: 0.02 ms  Duration: 447.83 ms     Billed Duration: 448 ms Memory Size: 128 MB     Max Memory Used: 128 MB

Ok cada llamada toma 1/2 segundo, y la RAM utilizada es de 128 MB

probar en aws

sam build --use-container
sam deploy --guided

El CLI de SAM preguntará sobre el nombre del stack de CloudFormation, luego para la confirmación, y luego desplegará nuestra función en AWS. La última página de la salida de sam se verá algo así como

Vista previa del changeset de CloudFormation antes del despliegue
======================================================
¿Desea desplegar este changeset? [y/N]: Y

2024-08-17 20:19:30 - Esperando a que se complete la creación/actualización del stack

Eventos de CloudFormation de las operaciones del stack (actualización cada 5.0 segundos)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Estado del recurso                                 Tipo de recurso                                   Identificador lógico del recurso                              Razón del estado del recurso                         
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
EN_PROGRESO                                        AWS::CloudFormation::Stack                     t1-py                                          Iniciado por el usuario                               
EN_PROGRESO                                        AWS::IAM::Role                                 HelloWorldFunctionRole                         -                                            
EN_PROGRESO                                        AWS::IAM::Role                                 HelloWorldFunctionRole                         Iniciada la creación del recurso                  
COMPLETADO                                       AWS::IAM::Role                                 HelloWorldFunctionRole                         -                                            
EN_PROGRESO                                        AWS::Lambda::Function                          HelloWorldFunction                             -                                            
EN_PROGRESO                                        AWS::Lambda::Function                          HelloWorldFunction                             Iniciada la creación del recurso                  
COMPLETADO                                       AWS::Lambda::Function                          HelloWorldFunction                             -                                            
EN_PROGRESO                                        AWS::ApiGateway::RestApi                       ServerlessRestApi                              -                                            
EN_PROGRESO                                        AWS::ApiGateway::RestApi                       ServerlessRestApi                              Iniciada la creación del recurso                  
COMPLETADO                                       AWS::ApiGateway::RestApi                       ServerlessRestApi                              -                                            
EN_PROGRESO                                        AWS::Lambda::Permission                        HelloWorldFunctionHelloWorldPermissionProd     -                                            
EN_PROGRESO                                        AWS::ApiGateway::Deployment                    ServerlessRestApiDeployment47fc2d5f9d          -                                            
EN_PROGRESO                                        AWS::Lambda::Permission                        HelloWorldFunctionHelloWorldPermissionProd     Iniciada la creación del recurso                  
COMPLETADO                                       AWS::Lambda::Permission                        HelloWorldFunctionHelloWorldPermissionProd     -                                            
EN_PROGRESO                                        AWS::ApiGateway::Deployment                    ServerlessRestApiDeployment47fc2d5f9d          Iniciada la creación del recurso                  
COMPLETADO                                       AWS::ApiGateway::Deployment                    ServerlessRestApiDeployment47fc2d5f9d          -                                            
EN_PROGRESO                                        AWS::ApiGateway::Stage                         ServerlessRestApiProdStage                     -                                            
EN_PROGRESO                                        AWS::ApiGateway::Stage                         ServerlessRestApiProdStage                     Iniciada la creación del recurso                  
COMPLETADO                                       AWS::ApiGateway::Stage                         ServerlessRestApiProdStage                     -                                            
COMPLETADO                                       AWS::CloudFormation::Stack                     t1-py                                          -                                            
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Salidas de CloudFormation del stack desplegado
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Salidas                                                                                                                                                                                   
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
...
Clave                 HelloWorldApi                                                                                                                                                         
Descripción         URL del punto final de API Gateway para el entorno de producción para la función Hello World                                                                                                      
Valor               https://wq3w4d41j7.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/                                                                                               
...-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

¿Ves la clave HelloWorldApi con la descripción URL del punto final de API Gateway para el entorno de producción para la función Hello World? Allí está nuestra URL pública:

https://wq3w4d41j7.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/  

pero primero iniciemos nuestro escuchador de logs:

sam logs -n HelloWorldFunction --stack-name "t1-py" --tail

y luego, mientras el escuchador de logs está en ejecución, llamemos en otra ventana de terminal:

curl https://wq3w4d41j7.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/
curl https://wq3w4d41j7.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/
curl https://wq3w4d41j7.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/

salida:

2024/08/18/[$LATEST]d86ecb94a39d44778f35bc2200b077a7 2024-08-18T00:46:22.468000 REPORT RequestId: 2e35fcf9-4d4b-4ced-962e-923adeddcbaa  Duration: 199.56 ms     Billed Duration: 200 ms Memory Size: 128 MB Max Memory Used: 56 MB
...break...
2024/08/18/[$LATEST]d86ecb94a39d44778f35bc2200b077a7 2024-08-18T00:46:22.909000 REPORT RequestId: dd200d9d-cf35-4813-a243-ca8cf7435908  Duration: 194.60 ms     Billed Duration: 195 ms Memory Size: 128 MB Max Memory Used: 56 MB
...break...
2024/08/18/[$LATEST]661b5b35a7c54641adb72974b273b78a 2024-08-18T00:48:01.610000 REPORT RequestId: afae88d1-3873-40a3-8b82-caa7019ca45e  Duration: 1.94 ms       Billed Duration: 2 ms   Memory Size: 128 MB Max Memory Used: 32 MB  Init Duration: 117.62 ms
...
2024/08/18/[$LATEST]661b5b35a7c54641adb72974b273b78a 2024-08-18T00:48:03.292000 REPORT RequestId: d7011c87-e6a2-4d76-bb39-4c32b754b991  Duration: 1.71 ms       Billed Duration: 2 ms   Memory Size: 128 MB Max Memory Used: 32 MB
...
2024/08/18/[$LATEST]661b5b35a7c54641adb72974b273b78a 2024-08-18T00:48:06.905000 REPORT RequestId: 0eab1866-b11f-4a26-8234-be07f47ecb49  Duration: 1.62 ms       Billed Duration: 2 ms   Memory Size: 128 MB Max Memory Used: 32 MB
...
2024/08/18/[$LATEST]661b5b35a7c54641adb72974b273b78a 2024-08-18T00:48:12.696000 REPORT RequestId: f0cc5b4b-f3c3-49d5-9708-fce265581ed2  Duration: 1.51 ms       Billed Duration: 2 ms   Memory Size: 128 MB Max Memory Used: 32 MB
...
2024/08/18/[$LATEST]661b5b35a7c54641adb72974b273b78a 2024-08-18T00:48:13.202000 REPORT RequestId: 40367789-27c0-419b-8483-cf054978e9b6  Duration: 1.51 ms       Billed Duration: 2 ms   Memory Size: 128 MB Max Memory Used: 32 MB
...
2024/08/18/[$LATEST]661b5b35a7c54641adb72974b273b78a 2024-08-18T00:48:13.552000 REPORT RequestId: 6d166356-5a6c-44c7-b5dd-5c2808340b79  Duration: 1.38 ms       Billed Duration: 2 ms   Memory Size: 128 MB Max Memory Used: 32 MB

con la llamada a S3 - aquí estamos hablando

2024/08/18/[$LATEST]992dbfa1ec234d2aa1d9d6003de766de 2024-08-18T00:54:55.322000 REPORT RequestId: d97fd1cd-d9ef-4d16-adcb-514fa65ca6f8  Duration: 513.99 ms     Billed Duration: 514 ms Memory Size: 128 MB Max Memory Used: 77 MB
...
un descanso
...
2024/08/18/[$LATEST]992dbfa1ec234d2aa1d9d6003de766de 2024-08-18T00:55:02.063000 REPORT RequestId: e6e6884d-d6b6-4dc7-aede-f3863f3b331d  Duration: 519.35 ms     Billed Duration: 520 ms Memory Size: 128 MB Max Memory Used: 77 MB
...
2024/08/18/[$LATEST]992dbfa1ec234d2aa1d9d6003de766de 2024-08-18T00:55:02.202000 REPORT RequestId: 91eeaca0-c983-4e99-9608-36948511bd27  Duration: 23.95 ms      Billed Duration: 24 ms  Memory Size: 128 MB Max Memory Used: 77 MB
...
2024/08/18/[$LATEST]992dbfa1ec234d2aa1d9d6003de766de 2024-08-18T00:55:02.662000 REPORT RequestId: d7035256-53f8-463c-93fd-f5de608f47a6  Duration: 33.55 ms      Billed Duration: 34 ms  Memory Size: 128 MB Max Memory Used: 77 MB
...
2024/08/18/[$LATEST]992dbfa1ec234d2aa1d9d6003de766de 2024-08-18T00:55:03.082000 REPORT RequestId: a2e338b3-f18e-4644-8f6d-2ab151421996  Duration: 21.50 ms      Billed Duration: 22 ms  Memory Size: 128 MB Max Memory Used: 77 MB
...
2024/08/18/[$LATEST]992dbfa1ec234d2aa1d9d6003de766de 2024-08-18T00:55:03.562000 REPORT RequestId: 111665a1-f43c-488b-bc02-cd203fef478f  Duration: 42.58 ms      Billed Duration: 43 ms  Memory Size: 128 MB Max Memory Used: 77 MB

Tamaño de memoria: 77 MB y duración facturada ~35 ms… Tiempo de calentamiento 1/2 segundo

limpiar el stack de CloudFormation de AWS

sam delete --stack-name "t1-py"

Compilar, probar, desplegar y ejecutar - función Lambda basada en JavaScript

JS local

compilar y ejecutar localmente

sam build
sam local invoke

produce

REPORT RequestId: 9e3c0a43-6432-4cc7-babf-f591773e5315  Init Duration: 0.05 ms  Duration: 126.34 ms     Billed Duration: 127 ms Memory Size: 128 MB     Max Memory Used: 128 MB
REPORT RequestId: 2856e8f1-166f-4a90-a094-d575ef00ff69  Init Duration: 0.02 ms  Duration: 43.73 ms      Billed Duration: 44 ms  Memory Size: 128 MB     Max Memory Used: 128 MB
REPORT RequestId: f1156bd5-dd9f-4c1c-b65d-68c04df5a987  Init Duration: 0.02 ms  Duration: 42.79 ms      Billed Duration: 43 ms  Memory Size: 128 MB     Max Memory Used: 128 MB

llamadas a s3 desde local:

REPORT RequestId: 06c4a5a0-6f1a-4e09-9518-cf706d08c319  Init Duration: 0.13 ms  Duration: 280.33 ms     Billed Duration: 281 ms Memory Size: 128 MB     Max Memory Used: 128 MB
...
REPORT RequestId: 4393e8bd-c59b-42e5-83b5-1729d0fb4d8f  Init Duration: 0.08 ms  Duration: 270.42 ms     Billed Duration: 271 ms Memory Size: 128 MB     Max Memory Used: 128 MB
...
REPORT RequestId: 90979693-7245-4f88-9f6b-070be83f75df  Init Duration: 0.05 ms  Duration: 431.86 ms     Billed Duration: 432 ms Memory Size: 128 MB     Max Memory Used: 128 MB

JS en aws

Desplegar y aceptar lo que sam pide y decirle que permita llamadas no autenticadas a nuestras funciones Lambda

sam deploy --guided
# ahora escuchar los logs
sam logs -n HelloWorldFunction --stack-name t2-js --tail
#o
sam logs -n HelloWorldS3Function --stack-name t2-js --tail

y después de hacer una llamada con cURL desde otra consola, los logs

2024/08/18/[$LATEST]fe2dcf2abd9041a0b90630c2c8aa0005 2024-08-18T01:38:38.831000 REPORT RequestId: 24e86600-e316-4678-81db-41eafff81aa0  Duration: 4.92 ms       Billed Duration: 5 ms   Memory Size: 128 MB Max Memory Used: 62 MB  Init Duration: 139.82 ms
...
2024/08/18/[$LATEST]fe2dcf2abd9041a0b90630c2c8aa0005 2024-08-18T01:38:47.451000 REPORT RequestId: 0d269d7f-61f6-4b48-b3c2-6f83aaba5f45  Duration: 2.58 ms       Billed Duration: 3 ms   Memory Size: 128 MB Max Memory Used: 62 MB
...
2024/08/18/[$LATEST]fe2dcf2abd9041a0b90630c2c8aa0005 2024-08-18T01:38:58.622000 REPORT RequestId: f1bd0e5a-d1d0-4136-9b02-6fba4dcc9a70  Duration: 1.34 ms       Billed Duration: 2 ms   Memory Size: 128 MB Max Memory Used: 63 MB
...
2024/08/18/[$LATEST]fe2dcf2abd9041a0b90630c2c8aa0005 2024-08-18T01:38:59.089000 REPORT RequestId: baa791a7-4f9c-41be-b516-81213bc7a365  Duration: 1.44 ms       Billed Duration: 2 ms   Memory Size: 128 MB Max Memory Used: 63 MB
...
2024/08/18/[$LATEST]fe2dcf2abd9041a0b90630c2c8aa0005 2024-08-18T01:38:59.966000 REPORT RequestId: ea2a1515-1188-4a44-956f-91f2fc97491f  Duration: 1.46 ms       Billed Duration: 2 ms   Memory Size: 128 MB Max Memory Used: 63 MB
...
2024/08/18/[$LATEST]fe2dcf2abd9041a0b90630c2c8aa0005 2024-08-18T01:39:00.428000 REPORT RequestId: 0f536ec5-26cb-42b9-beaa-045984b8c468  Duration: 1.45 ms       Billed Duration: 2 ms   Memory Size: 128 MB Max Memory Used: 63 MB

Bien. no se gasta mucho tiempo haciendo nada. pero tampoco se queda dormido.

Rendimiento de la función Lambda en JavaScript que lee desde un bucket s3

2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:42:45.155000 REPORT RequestId: c4630419-4502-467c-9cda-c5087d6b2743  Duration: 1051.97 ms    Billed Duration: 1052 ms        Memory Size: 128 MB Max Memory Used: 88 MB  Init Duration: 411.76 ms
...break...
2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:42:52.195000 REPORT RequestId: 4b881f2b-4b30-4890-afc2-b7299b6397b3  Duration: 259.87 ms     Billed Duration: 260 ms Memory Size: 128 MB Max Memory Used: 89 MB
...break...
2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:42:58.455000 REPORT RequestId: 77f4d820-2f2e-4190-a1e3-bc4821ccdb9b  Duration: 165.44 ms     Billed Duration: 166 ms Memory Size: 128 MB Max Memory Used: 89 MB
...
2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:43:03.095000 REPORT RequestId: 41ce9fd8-aaf4-46c4-a827-0a45592041c0  Duration: 63.74 ms      Billed Duration: 64 ms  Memory Size: 128 MB Max Memory Used: 89 MB
...
2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:43:03.695000 REPORT RequestId: 9494f176-3818-4fb3-a581-857f1eb2df23  Duration: 73.16 ms      Billed Duration: 74 ms  Memory Size: 128 MB Max Memory Used: 89 MB
...
2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:43:04.315000 REPORT RequestId: 528c909f-4a08-415e-a713-e3d9e9e4d615  Duration: 87.44 ms      Billed Duration: 88 ms  Memory Size: 128 MB Max Memory Used: 89 MB
...
2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:43:04.835000 REPORT RequestId: 9b636429-56f5-4974-afe9-e53e786adb61  Duration: 55.62 ms      Billed Duration: 56 ms  Memory Size: 128 MB Max Memory Used: 89 MB
...
2024/08/18/[$LATEST]8e22ce6f54074c6098cdbf89ed0ca0b9 2024-08-18T01:43:05.415000 REPORT RequestId: d4c298df-b237-4605-894f-fde05fe0461a  Duration: 69.88 ms      Billed Duration: 70 ms  Memory Size: 128 MB Max Memory Used: 89 MB

Limpieza de AWS js

eliminando…

sam delete --stack-name t2-js

Compilar, probar, desplegar y ejecutar - función Lambda basada en Golang

Pruebas locales de Lambda en Golang

Para ser precisos - hacer llamadas de prueba, no ejecutar pruebas unitarias.

El comando sam build está dentro del Makefile. Entonces estamos ejecutando:

make

ejecutar una sola función

sam local invoke HelloWorldFunction --event events/event.json
sam local invoke HelloWorldFunction --event events/event.json
sam local invoke HelloWorldFunction --event events/event.json

sam local invoke HelloWorldS3Function --event events/event.json
sam local invoke HelloWorldS3Function --event events/event.json
sam local invoke HelloWorldS3Function --event events/event.json

Opción 2: ahora iniciar el servidor local:

sam local start-api

la salida:

ahora en una ventana de terminal separada:

curl http://localhost:3000/hello
curl http://localhost:3000/hello
curl http://localhost:3000/hello

curl http://localhost:3000/hellos3
curl http://localhost:3000/hellos3
curl http://localhost:3000/hellos3

la salida de la llamada local simple a la función Lambda basada en Golang:

REPORT RequestId: 54cc3271-7f04-44a3-8d91-d5d69d2428ea  Init Duration: 0.03 ms  Duration: 2.24 ms       Billed Duration: 3 ms   Memory Size: 128 MB     Max Memory Used: 128 MB
...
REPORT RequestId: c753bdf9-1af0-4b40-9516-5fb2ad96ba00  Duration: 0.29 ms       Billed Duration: 1 ms   Memory Size: 128 MB     Max Memory Used: 128 MB
...
REPORT RequestId: edceb310-e6e9-4f0a-bd6e-58afd40e9b70  Duration: 0.28 ms       Billed Duration: 1 ms   Memory Size: 128 MB     Max Memory Used: 128 MB

la salida de la llamada local “s3” a la función Lambda basada en Golang:

REPORT RequestId: 1556e298-a17a-4d45-9fdc-b7f62118c246  Init Duration: 0.06 ms  Duration: 142.76 ms     Billed Duration: 143 ms Memory Size: 128 MB     Max Memory Used: 128 MB
...
REPORT RequestId: e4638fb4-52f4-4086-b673-c9de0f02d3f7  Duration: 86.75 ms      Billed Duration: 87 ms  Memory Size: 128 MB     Max Memory Used: 128 MB
...
REPORT RequestId: b1bdcbf8-06f8-4605-a7da-d34f41198811  Duration: 105.07 ms     Billed Duration: 106 ms Memory Size: 128 MB     Max Memory Used: 128 MB

la duración de 1ms parece buena, pero ¿por qué Memory Size: 128 MB? Debería ser como 12MB? Probablemente ese es el mínimo que tienen.

Pruebas de Lambda en Golang en AWS

sam deploy --guided

iniciar el escuchador de logs

sam logs -n HelloWorldFunction --stack-name t3-go --tail

y llamar a la función 3 veces:

curl https://k92zaa81w8.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/
curl https://k92zaa81w8.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/
curl https://k92zaa81w8.execute-api.ap-southeast-2.amazonaws.com/Prod/hello/

en los logs vemos:

2024/08/18/[$LATEST]1f5b2a65bda1433789d9281d02cf4622 2024-08-18T04:18:02.908000 REPORT RequestId: 358b5762-dad7-4380-a83f-e21349fae20b  Duration: 11.71 ms      Billed Duration: 70 ms     Memory Size: 128 MB     Max Memory Used: 20 MB  Init Duration: 57.52 ms
...break...
2024/08/18/[$LATEST]1f5b2a65bda1433789d9281d02cf4622 2024-08-18T04:18:07.404000 REPORT RequestId: 3051d741-504a-49ae-95b3-077628b4b929  Duration: 0.99 ms       Billed Duration: 1 ms      Memory Size: 128 MB     Max Memory Used: 20 MB
...break...
2024/08/18/[$LATEST]1f5b2a65bda1433789d9281d02cf4622 2024-08-18T04:18:11.923000 REPORT RequestId: 51c38ca9-920d-4f30-be75-a1a44538c9ee  Duration: 1.02 ms       Billed Duration: 2 ms      Memory Size: 128 MB     Max Memory Used: 20 MB
...
2024/08/18/[$LATEST]1f5b2a65bda1433789d9281d02cf4622 2024-08-18T04:18:12.486000 REPORT RequestId: 98727f66-f3f1-46ad-9a5a-55a6243609ba  Duration: 0.96 ms       Billed Duration: 1 ms      Memory Size: 128 MB     Max Memory Used: 20 MB
...
2024/08/18/[$LATEST]1f5b2a65bda1433789d9281d02cf4622 2024-08-18T04:18:13.015000 REPORT RequestId: 9d8bfb28-d4eb-4868-9af7-3b3946acc92c  Duration: 0.98 ms       Billed Duration: 1 ms      Memory Size: 128 MB     Max Memory Used: 20 MB
  • La duración facturada es de 2ms. Bueno.
  • Max Memory Used: 20 MB. Esperado
  • Parece que no entra en un sueño

Ahora hagamos lo mismo para la función Lambda que tiene una llamada a S3 dentro

2024/08/18/[$LATEST]8bd6f2bea333485aad2cbf5166433cf5 2024-08-18T04:22:57.711000 REPORT RequestId: 9f09db3e-d9bc-45fe-9674-df133f0f1dc2  Duration: 28.08 ms      Billed Duration: 29 ms     Memory Size: 128 MB     Max Memory Used: 37 MB
...
2024/08/18/[$LATEST]8bd6f2bea333485aad2cbf5166433cf5 2024-08-18T04:23:15.324000 REPORT RequestId: 4bc39553-6a42-4347-b322-6c80f24cdb01  Duration: 30.56 ms      Billed Duration: 31 ms     Memory Size: 128 MB     Max Memory Used: 38 MB
...
2024/08/18/[$LATEST]8bd6f2bea333485aad2cbf5166433cf5 2024-08-18T04:23:51.144000 REPORT RequestId: 55ac2b18-394c-4699-87a5-4ba52230f386  Duration: 27.01 ms      Billed Duration: 28 ms     Memory Size: 128 MB     Max Memory Used: 38 MB

Limpieza

No olvides eliminarlo

sam delete --stack-name t3-go

Enlaces útiles