Rendimiento de AWS Lambda: JavaScript vs Python vs Golang
¿Qué lenguaje se debe utilizar para AWS Lambda?
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…
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
- Lambda con capas con AWS SAM y Python
- Corrigiendo el error de GORM AutoMigrate en PostgreSQL
- AWS SAM + AWS SQS + Python PowerTools
- CLI de SAM: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html
- Instalación de Linux y herramientas
- Hoja de trucos de Golang
- Hoja de trucos de Bash
- Hoja de trucos de Python
- Popularidad de lenguajes de programación y frameworks
- Espacio de Golang
- Alternativas a Beautiful Soup para Go
- Generar PDF en GO - Librerías y ejemplos"