Introducción a la arquitectura Serverless y AWS Lambda
El desarrollo web moderno se mueve rápidamente hacia la computación sin servidor (serverless). Este paradigma permite a los desarrolladores centrarse en escribir la lógica de negocio sin preocuparse por la gestión de la infraestructura. AWS Lambda es uno de los servicios más populares para implementar funciones serverless, y se combina perfectamente con JavaScript (Node.js).
En este artículo, analizaremos en detalle qué es AWS Lambda, cómo crear y ejecutar tu primera función serverless en JavaScript, y revisaremos las mejores prácticas y ejemplos de código real. El material será útil tanto para principiantes como para desarrolladores experimentados que deseen dominar el desarrollo serverless.
¿Qué es AWS Lambda y cómo funciona con Node.js?
AWS Lambda es un servicio informático que ejecuta tu código en respuesta a eventos y gestiona automáticamente los recursos informáticos. Solo pagas por el tiempo de ejecución consumido (redondeado a 1 ms) y la cantidad de solicitudes.
Características clave de AWS Lambda para el desarrollador de JavaScript
- Soporte para Node.js: AWS Lambda es compatible oficialmente con Node.js 14, 16, 18 y 20.
- Escalado automático: Lambda crea automáticamente instancias de la función para procesar cada solicitud entrante.
- Disparadores (Triggers): Las funciones se pueden invocar por HTTP (a través de API Gateway), por programación (CloudWatch Events), al cargar un archivo en S3 y de muchas otras formas.
- Limitaciones: Tiempo de ejecución de hasta 15 minutos, memoria de 128 MB a 10 240 MB, tamaño del paquete de hasta 50 MB (comprimido) o 250 MB (descomprimido).
Para trabajar con Lambda en JavaScript no se necesita ninguna configuración adicional: simplemente escribe el handler (controlador) y sube el código a AWS.
Creación de tu primera función serverless en JavaScript
Escribamos una función serverless simple que reciba un JSON con el nombre de un usuario y devuelva un saludo. Este es un ejemplo clásico con el que empezar a familiarizarse con AWS Lambda.
Paso 1: Estructura básica del handler
Cada función Lambda en Node.js consiste en una función handler exportada que acepta tres parámetros: event (evento), context (contexto de ejecución) y callback (para respuesta asíncrona).
// index.jsexports.handler = async (event, context) => { // Lógica de la función const name = event.name || 'Invitado'; return { statusCode: 200, body: JSON.stringify({ message: `¡Hola, ${name}! Esta es tu primera función serverless.` }) };};Paso 2: Manejo de diferentes tipos de eventos
En proyectos reales, los eventos pueden provenir de diferentes fuentes. Veamos un ejemplo de procesamiento de una solicitud de API Gateway:
// handler.jsexports.handler = async (event) => { try { // Parseamos el cuerpo de la solicitud (si existe) const body = event.body ? JSON.parse(event.body) : {}; const { userId, action } = body;
// Ejemplo de lógica de negocio const result = { userId: userId || 'unknown', action: action || 'default', timestamp: new Date().toISOString(), message: 'Acción ejecutada con éxito' };
return { statusCode: 200, headers: { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' }, body: JSON.stringify(result) }; } catch (error) { return { statusCode: 500, body: JSON.stringify({ error: error.message }) }; }};Trabajo con servicios externos y entorno
Las funciones serverless rara vez funcionan de forma aislada. La mayoría de las veces necesitan interactuar con bases de datos, S3, Dyna