Serverless en TypeScript: tu backend sin servidores (y sin dolores de cabeza)
¡Hola, colega! Si alguna vez has configurado un VPS, has lidiado con nginx, has monitoreado la carga de la CPU y has reiniciado un PostgreSQL caído a las tres de la mañana, este artículo es para ti. El mundo se mueve hacia serverless (computación sin servidor), y TypeScript es el lenguaje ideal para subirte a este tren en plena marcha.
Analicemos qué son las funciones serverless, cómo escribirlas en TypeScript y qué plataformas (AWS Lambda, Google Cloud Functions, Yandex Cloud Functions) elegir para tu proyecto. Spoiler: habrá código, habrá ejemplos, pero no habrá servidores.
¿Qué es Serverless? (Spoiler: los servidores siguen existiendo)
El nombre "serverless" es un truco de marketing. Los servidores, por supuesto, existen, pero tú no sabes nada de ellos y no quieres saberlo. Simplemente escribes una función (generalmente en TypeScript), la subes a la nube y se ejecuta bajo demanda. Pagas solo por el tiempo de ejecución, ni por un servidor inactivo ni por la escalabilidad.
Esto se llama FaaS (Function as a Service). Las principales ventajas son:
- Escalado automático — de 0 a 10 000 solicitudes por segundo en cuestión de segundos.
- Ahorro — pagas por milisegundos de ejecución, no por alquilar una máquina.
- Menos DevOps — la nube actualiza el entorno de ejecución y parchea vulnerabilidades por sí sola.
- TypeScript listo para usar — todos los grandes proveedores admiten Node.js y, por lo tanto, TypeScript.
Pero también hay desventajas: arranque en frío (primeros milisegundos de carga), límite de tiempo de ejecución (generalmente 15 minutos) y dificultades con la depuración.
Escribiendo nuestra primera función Serverless en TypeScript para AWS Lambda
AWS Lambda es el rey de serverless. Empecemos con él. Instala aws-sdk y @types/aws-lambda para TypeScript.
npm init -ynpm install typescript @types/node aws-lambda --save-devnpx tsc --initCrea el archivo handler.ts:
import { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';
export const handler = async (event: APIGatewayProxyEvent): Promise<APIGatewayProxyResult> => { const name = event.queryStringParameters?.name || 'Invitado'; return { statusCode: 200, headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ message: `¡Hola, ${name}! Esta es una función serverless en TypeScript.`, timestamp: new Date().toISOString(), }), };};Compila el proyecto:
npx tsczip -r function.zip .Sube el archivo comprimido a AWS Lambda a través de la consola, especifica el runtime Node.js 20.x y como punto de entrada handler.handler.
¡Listo! Ahora tienes una API HTTP que no requiere servidor. Puedes conectarla a API Gateway y usarla.
Google Cloud Functions: la alternativa de Google con TypeScript
Si prefieres el ecosistema de Google (Firebase, BigQuery, GCP), entonces Google Cloud Functions es tu opción. La sintaxis es similar a AWS, pero hay matices.
Instala la herramienta:
npm install -g @google-cloud/functions-frameworkCrea index.ts:
import { Request, Response } from 'express';
export const helloWorld = (req: Request, res: Response) => { const name = req.query.name || 'Mundo'; res.json({ message: `¡Hola, ${name}! Esto es Google Cloud Functions en TypeScript.`, timestamp: new Date().toISOString(), });};Para pruebas locales:
npx @google-cloud/functions-framework --target=helloWorldDespliegue con un solo comando:
gcloud functions deploy hello-world \ --runtime nodejs20 \ --trigger-http \ --allow-unauthenticated \ --entry-point hell