Contenido del curso

Prueba tu Lambda sin desplegar a AWS

Resumen

¿Te imaginas desarrollar aplicaciones serverless sin desplegar a la nube cada vez que quieres probar un cambio? Probar funciones Lambda en local con Serverless Framework es posible y te ahorra tiempo valioso de despliegue. Aquí verás cómo invocar funciones localmente y cómo el plugin Serverless Offline emula API Gateway en tu máquina.

¿Cómo invocar una función Lambda en local con Serverless Framework?

Antes de instalar plugins externos, Serverless Framework ya trae un comando nativo para ejecutar tu función sin desplegarla. La idea es simple: pruebas tu lógica directamente desde la terminal, sin esperar a que CloudFormation levante toda la infraestructura en AWS.

Para verlo en acción, primero le damos algo de dinamismo a la respuesta de la Lambda. En lugar de devolver un mensaje estático, usamos new Date() con getHours(), getMinutes() y getSeconds() para concatenar la hora actual en el body de la respuesta [02:00]. Así, cada invocación devuelve un valor distinto y confirmas que la función se está ejecutando de verdad.

El comando clave es sls invoke local, pero necesita que le indiques cuál función ejecutar, porque un mismo proyecto puede tener varias Lambdas declaradas en el serverless.yml. La sintaxis correcta es:

bash sls invoke local --function hello

¿Qué hace sls invoke local? Ejecuta el código de una función Lambda directamente en tu máquina sin desplegarla a AWS. Solo corre la lógica del handler, no simula peticiones HTTP.

¿Por qué invoke local no es lo mismo que una petición HTTP real?

Al invocar la función con invoke local ves la respuesta en consola, pero no es idéntica a lo que recibirías desde el navegador. La razón es sencilla: en el navegador haces una petición HTTP con método GET que pasa por API Gateway, mientras que invoke local solo dispara la lógica del handler sin emular el flujo completo del ecosistema serverless de AWS.

Emular todo ese ecosistema desde cero sería muy complejo, pero la comunidad ya hizo gran parte del trabajo. Existe un plugin ampliamente adoptado que simula tanto Lambda como API Gateway en tu entorno local, y se llama Serverless Offline.

¿Qué es Serverless Offline y qué emula?

Serverless Offline es un plugin de la comunidad listado en la página oficial de plugins de Serverless Framework. Su función es emular dos servicios de AWS al mismo tiempo:

  • AWS Lambda, para ejecutar el código de tus funciones.
  • API Gateway, para exponer rutas HTTP en tu máquina.

Esto significa que puedes abrir el navegador, hacer una petición GET a un endpoint local y recibir una respuesta tal como ocurriría en producción. Ideal para iterar rápido en lógicas complejas sin pagar el costo de tiempo del despliegue [05:30].

¿Cómo instalar y configurar Serverless Offline paso a paso?

La instalación toma segundos. Primero instalas el paquete con npm desde la raíz de tu proyecto:

bash npm install serverless-offline --save-dev

Esto crea la carpeta node_modules con el plugin listo para usarse. Después abres tu archivo serverless.yml y añades la sección de plugins:

yaml plugins:

  • serverless-offline

Guardas el archivo y con eso le das nuevos superpoderes a tu aplicación. Para confirmar que quedó bien instalado ejecuta sls help: aparecerá una nueva sección llamada Serverless Offline entre los comandos disponibles.

¿Cómo arranco un servidor local con Serverless Offline? Ejecuta sls offline start en la raíz del proyecto. El plugin levanta un servidor en localhost:3000 con tus rutas listas para recibir peticiones HTTP.

¿Cómo se prueba la API en el navegador?

Al correr sls offline start, la consola muestra los endpoints disponibles. En el ejemplo, queda expuesta una ruta GET en http://localhost:3000/dev/hello [07:00]. Abres esa URL en el navegador y recibes la misma respuesta que daría AWS, con la hora actualizándose en cada recarga.

La terminal también registra cada llamada que hace la API local, lo que te permite depurar y ver el comportamiento en tiempo real.

¿Qué limitaciones tiene el desarrollo local con Serverless Offline?

Serverless Offline acelera enormemente el ciclo de desarrollo, pero no es mágico. Si modificas el código mientras el servidor está corriendo, los cambios no siempre se reflejan automáticamente. En esos casos necesitas detener el proceso y volver a ejecutar sls offline start para que tome la versión nueva.

Tampoco emula al cien por ciento todos los servicios de AWS ni los comportamientos exactos de IAM, cold starts o triggers de otros servicios. Para lógica HTTP estándar funciona muy bien; para escenarios más exóticos, te tocará probar en la nube de todos modos.

Algunas buenas prácticas que vale la pena adoptar:

  • Usa sls invoke local --function <nombre> cuando solo quieras probar la lógica del handler.
  • Usa sls offline start cuando necesites simular peticiones HTTP completas vía API Gateway.
  • Reinicia el servidor offline tras cambios significativos en serverless.yml o en los handlers.
  • Explora otros plugins de la comunidad para extender capacidades como autenticación o integración con DynamoDB local.

Con estas dos herramientas combinadas reduces drásticamente el tiempo de espera entre iteraciones, mantienes tu cuenta de AWS limpia y desarrollas con la misma agilidad que tendrías en cualquier backend tradicional. ¿Qué plugin de Serverless Framework te gustaría explorar a continuación? Cuéntalo en los comentarios.