NestJS, un framework Node.js potente y extensible, es muy adecuado para construir aplicaciones sin servidor. En este artículo, exploraremos el proceso de construcción y despliegue de una aplicación sin servidor NestJS utilizando el Framework Serverless.

Requisitos previos

Antes de sumergirnos en la construcción de nuestra aplicación NestJS sin servidor, vamos a asegurarnos de que tenemos las herramientas necesarias instaladas:

Node.js y npm:

  • Asegúrate de que tienes Node.js y npm instalados en tu máquina. Puedes descargarlos desde nodejs.org.

NestJS CLI:

  • Instala la CLI de NestJS globalmente ejecutando: npm install -g @nestjs/cli.

Serverless Framework:

  • Instala el Framework Serverless de forma global con: npm install -g serverless.

Cuenta AWS:

  • Crear una cuenta de AWS para desplegar la API Serverless en lambda.

Creación de una API NestJS.

Paso 1: [Crear API NestJS]

Ejecuta el siguiente comando para crear una API NestJS básica.

nest new serverless-backend
cd serverless-backend


Seleccione yarn o npm como gestor de paquetes, depende de su preferencia.

Paso 2: [Ejecutar NestJS]

npm run start

Paso 3: [Prueba de la API NestJS]

curl http://localhost:3000

El resultado esperado será el siguiente:

Hello World!

Cree API sin servidor con AWS Lambda y Serverless Framework.

Serverless Framework es una potente y popular herramienta de código abierto que simplifica el proceso de creación e implementación de aplicaciones sin servidor

Paso 1: [Instalar dependencias]

yarn add aws-lambda @codegenie/serverless-framework
yarn add -D @types/aws-lambda serverless-offline

Paso 2: [Crear NestJS Lambda Handler]


Realiza cambios en el archivo main.ts como se menciona a continuación.  

 import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { Callback, Context, Handler } from 'aws-lambda';
import { configure } from '@codegenie/serverless-express';

let server: Handler;

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.init();

  const expressHandler = app.getHttpAdapter().getInstance();

  return configure({ app: expressHandler });
}

export const handler: Handler = async (
  event: any,
  context: Context,
  callback: Callback
) => {
  server = server ?? (await bootstrap());
  return server(event, context, callback);
}


Paso 3: [Configurar AWS para Serverless]

Ejecute el siguiente comando para configurar su cuenta de AWS para ser utilizado por Serverless Framework.

sls config credentials --provider aws --key your-aws-access-key-id --secret your-aws-access-key-secret

Paso 4: [Crear YAML para el despliegue]

Crea un archivo yaml en la raíz del directorio de su proyecto.

service: serverless-app

plugins:
 - serverless-offline

provider:
 name: aws
 runtime: nodejs18.x

functions:
 main:
   handler: dist/main.handler
   events:
     - http:
         method: any
         path: /{any+}

Paso 5: [Construir y ejecutar localmente]

Ejecute el siguiente comando para ejecutar la función lambda localmente aprovechando el paquete serverless-offline.

 yarn build
sls offline

Ahora curl para acceder a la API.

curl http://localhost/dev/your-route

Paso 6: [Implementar en AWS]

Al ejecutar el siguiente comando, la aplicación se desplegará en AWS Lambda con la etapa predeterminada como 'dev'.

sls deploy

Para modificar el escenario, utilice el comando que se indica a continuación

sls deploy --stage prod

Usted verá a continuación el mensaje después de la implementación exitosa. 🚀

Paso 7: [Eliminar la API de Lambda desplegada].

Utilice el siguiente comando para eliminar la API Lambda desplegada si es necesario.

sls remove

Conclusiones:
En resumen, el Serverless Framework permite a los desarrolladores aprovechar los beneficios de la computación sin servidor sin la complejidad de gestionar la infraestructura. Al abstraer las preocupaciones operativas, acelera el proceso de desarrollo, promueve las mejores prácticas y permite la creación de aplicaciones sin servidor escalables y rentables en varios proveedores de nube.

¡Feliz codificación! 😄

Referencia