Contenido del curso
Conceptos Claves
Explicación de Serverless Framework
Ecosistema Serverless en AWS
Desarrollando con Serverless Framework
- 12

Conecta Lambda a DynamoDB con AWS SDK
17:23 min - 13

Configuración y uso de DynamoDB Local con Serverless
13:42 min - 14

Variables de ambiente y permisos IAM al desplegar Lambda
18:20 min - 15

Insertar usuarios en DynamoDB con Lambda POST
22:36 min - 16

Actualización de Usuarios en DynamoDB con Serverless Framework
12:36 min - 17

Función Lambda DELETE en Python con Boto3
16:28 min - 18

Servicios AWS más allá de Lambda y DynamoDB
04:24 min
Bonus
Cierre del curso
Crea tus API’s con Serverless Framework y ChatGPT
Optimizar tamaño de Lambdas con serverless.yml
Resumen
Reducir el tamaño de tus funciones Lambda no es un capricho técnico: es la diferencia entre un despliegue que tarda 72 segundos y uno que vuela. Si tus funciones pesan 18 MB y solo necesitan unos cuantos kilobytes, estás cargando basura que ralentiza el cold start, infla tus minutos de GitHub Actions y te impide editar el código directamente en la consola de AWS.
¿Por qué importa el tamaño de una función Lambda?
Una Lambda pesada afecta dos momentos críticos: el despliegue y el arranque. Aunque serverless suene a “sin servidor”, tu código sí se ejecuta en una máquina en la nube que debe cargarlo cada vez que entra una petición HTTP.
- Cold start más lento: cuanto más pesa el paquete, más tarda el servidor en cargarlo antes de ejecutar la primera petición.
- Despliegues costosos: GitHub Actions cobra por minutos. Subir 18 MB a AWS toma más tiempo que subir 1 KB.
- Buenas prácticas de la industria: la recomendación es mantener Lambdas pequeñas y enfocadas.
En el ejemplo de la clase, el despliegue inicial tardaba 72 segundos [05:12], en buena parte porque GitHub Actions estaba subiendo 18 MB innecesarios a AWS.
¿Qué es el cold start en Lambda? Es el tiempo que tarda AWS en preparar un contenedor, cargar tu código y ejecutarlo por primera vez. Si tu paquete pesa menos, ese arranque es más rápido.
¿Cómo reducir el peso de una Lambda con serverless.yml?
La clave está en el bloque package del archivo serverless.yml. La estrategia es contraintuitiva pero efectiva: excluir todo y luego incluir solo lo necesario en cada función.
Excluir todos los archivos a nivel global
En la sección package del serverless.yml raíz, configuras un patrón que excluye absolutamente todo del paquete por defecto. El símbolo de exclamación (!) actúa como negación dentro del patrón, indicando que ningún archivo debe incluirse.
Si dejaras la configuración así, tu paquete quedaría vacío. El truco está en sobrescribir esta opción dentro de cada función Lambda.
Incluir solo el handler de cada función
Dentro de la definición de cada Lambda, agregas su propio bloque package con el patrón específico del archivo que necesita. Por ejemplo, para una función getUsers, indicas la ruta exacta: getUsers/handler.js.
Pasos concretos para hacer el refactor:
- Mueve el patrón de exclusión global al nivel raíz de
package. - Elimina la opción de empaquetado individual antigua, porque ahora cada Lambda gestiona su propio patrón.
- En cada función, agrega un bloque
packageconpatternsapuntando al handler específico. - Respeta la extensión correcta:
.jspara Node.js,.pypara Python (por ejemplo,deleteUsers/handler.py). - Verifica que el nombre de la carpeta y el archivo coincidan exactamente con la estructura del proyecto.
Es fundamental que el YAML quede bien indentado y al mismo nivel que la propiedad handler de cada función [07:45].
¿Qué hace el símbolo
!en los patterns de Serverless Framework? Funciona como una negación. Le dice al empaquetador que excluya los archivos que coincidan con ese patrón, dejando fuera todo lo que no quieras subir a AWS.
¿Qué beneficios reales obtienes tras la optimización?
Después de aplicar este refactor, las funciones Lambda pasaron de 18 MB a aproximadamente 1.2 KB cada una [13:20]. La diferencia no es marginal, es de varios órdenes de magnitud.
Despliegues más rápidos y baratos
Menos peso significa menos tiempo subiendo el paquete a AWS desde GitHub Actions. Eso se traduce en menos minutos consumidos del plan gratuito y, si tu equipo crece, menos costos asociados al CI/CD.
En la clase también se mencionan otras estrategias complementarias para optimizar GitHub Actions:
- Cachear dependencias como Serverless Framework para evitar reinstalarlas en cada ejecución.
- Separar pasos del workflow para que no todos se ejecuten en cada commit.
- Usar Lambda layers cuando las dependencias crezcan y se repitan entre funciones.
Edición en vivo desde la consola de AWS
Aquí viene lo interesante. AWS impone un límite de tamaño para permitir editar el código de una Lambda directamente desde la consola web. Con paquetes de 18 MB, esa opción está bloqueada. Con paquetes de 1 KB, puedes hacer live coding y ajustar el handler sin necesidad de redesplegar desde tu máquina local.
Esto es especialmente útil para depurar errores rápidos o probar cambios menores en producción controlada.
¿Cómo validar el cambio sin desplegar manualmente?
Si ya tienes automatización con GitHub Actions configurada, no necesitas correr sls deploy localmente. Basta con seguir el flujo normal de Git:
git add .para incluir los cambios.git commit -m "improvement on packaging"con un mensaje descriptivo.git push origin nombre-de-la-ramapara enviar los cambios al repositorio remoto.
El workflow se dispara solo, ejecuta el build and test, y al finalizar despliega las Lambdas optimizadas. En la pestaña de Actions del repositorio puedes ver el progreso en tiempo real y confirmar que el tiempo total bajó respecto a despliegues anteriores.
¿Qué otras estrategias has usado tú para reducir el peso de tus funciones serverless? Cuéntanos en los comentarios qué optimizaciones aplicarías o si ya estás usando Lambda layers en tus proyectos.