Optimización de Despliegue y Tamaño en AWS Lambda
Clase 22 de 25 • Curso de Serverless Framework en AWS
Resumen
¿Cómo podemos lograr que nuestras funciones Lambda sean más rápidas y ligeras?
Las funciones Lambda son una herramienta poderosa en el mundo del desarrollo serverless en Amazon Web Services (AWS). Sin embargo, uno de los desafíos comunes es asegurar que estas funciones sean lo más ligeras y eficientes posible. Aquí exploraremos cómo mejorar el desempeño mediante la reducción de tamaño de las funciones Lambda, ahorrando tiempo y costo en su despliegue.
¿Por qué es importante reducir el tamaño de las funciones Lambda?
Mantener el tamaño de las funciones Lambda bajo es crucial por varias razones:
- Tiempo de arranque (cold start): Las funciones Lambda voluminosas pueden incrementar el tiempo de inicio, afectando el rendimiento y la rapidez con que responden.
- Velocidad de despliegue: Funciones más pequeñas se despliegan más rápido, lo que es vital cuando se utilizan herramientas de automatización como GitHub Actions.
- Costos asociados: Reducir el tiempo que tardan en ser subidas a AWS puede ahorrar combustible en cronometrizados servicios como GitHub Actions.
Amazon Web Services trata cada petición a Lambda como un "trigger" que activa la carga del código en un servidor. Por lo tanto, cuanto menos pese el código, más eficiente será la ejecución.
¿Cómo optimizar el empaquetado de funciones Lambda?
Para que las funciones sean ligeras, el enfoque es excluir archivos innecesarios y enfocar el empaquetado solo en lo esencial: el handler. Aquí te mostramos cómo hacerlo:
# Ejemplo de configuración de serverless.yaml
package:
exclude:
- "**"
functions:
createUser:
handler: createUsers/handler.handler
package:
include:
- createUsers/handler.js
getUser:
handler: getUsers/handler.handler
package:
include:
- getUsers/handler.js
deleteUser:
handler: deleteUsers/handler.handler
package:
include:
- deleteUsers/handler.py
- Excluir archivos: Inicialmente, la idea es excluir todos los archivos, logrando un empaquetado vacío.
- Incluir esencialmente handlers: Para cada función Lambda, reincluso exclusivamente los archivos indispensables para su ejecución, como el
handler
.
¿Cómo probar los cambios de optimización?
Una vez realizados estos cambios, es esencial probarlos:
- Despliegue local: Utilizando
SLS deploy local
para observar el comportamiento antes de confirmar los cambios. - Automatización con GitHub Actions: Con un simple
git commit
ygit push
, es posible validar si los cambios surten el efecto deseado mediante la ejecución del flujo automatizado.
Estrategias adicionales para mejorar el despliegue
Aparte de empaquetar solo los handlers necesarios, existen otras estrategias para optimizar aún más:
- Uso de caché: Guardar en caché dependencias recurrentes para acelerar despliegues.
- Lambda layers: Segmentar las dependencias significativamente grandes para reutilizarlas entre diferentes Lambdas.
- Condicionar el pipeline: Ejecutar pasos selectivos en el pipeline de CI/CD para reducir tiempos de ejecución.
Con estos consejos y técnicas, no solo optimizas el tiempo de carga y despliegue de tus Lambdas, sino que también cumples con las mejores prácticas del sector cloud, ahorrando recursos valiosos en el proceso. ¡Atrévete a aplicar estas optimizaciones en tu próximo proyecto serverless!