Introducción: ¿Qué es Serverless y AWS Lambda?
\n\nServerless (computación sin servidor) es un modelo de computación en la nube en el que el desarrollador se abstrae completamente de la gestión de la infraestructura del servidor. Simplemente escribe código, lo carga en la nube, y el proveedor (AWS, Google Cloud, Azure) lo ejecuta automáticamente en respuesta a eventos, escalando los recursos bajo demanda. Solo paga por el tiempo de ejecución real del código (y la cantidad de solicitudes).
\n\nAWS Lambda es el servicio serverless insignia de Amazon Web Services. Permite ejecutar código en varios lenguajes, incluyendo JavaScript (Node.js), sin necesidad de aprovisionar y mantener servidores. Lambda es ideal para procesar solicitudes HTTP (a través de API Gateway), tareas en segundo plano, procesamiento de archivos desde S3, reacciones a cambios en la base de datos DynamoDB y muchos otros escenarios.
\n\nEn este artículo, desglosaremos AWS Lambda en JavaScript de la A a la Z: desde la creación de su primera función hasta su implementación, monitoreo y optimización.
\n\nParte principal: Creación y gestión de funciones Lambda en Node.js
\n\n1. Creación de la primera función Lambda
\n\nVaya a la consola de AWS Lambda y haga clic en "Crear función". Seleccione la opción "Desde cero". Asigne un nombre (por ejemplo, my-first-lambda) y elija el entorno de ejecución Node.js 20.x (o la última versión estable).
La estructura básica de una función en Node.js se ve así:
\n\nexports.handler = async (event, context) => {\n // event - datos que se pasan a la función (por ejemplo, solicitud HTTP)\n // context - información sobre el entorno de ejecución (por ejemplo, ID de solicitud)\n\n console.log('Evento recibido:', JSON.stringify(event, null, 2));\n\n // Su lógica de negocio\n const response = {\n statusCode: 200,\n body: JSON.stringify({\n message: '¡Hola desde Lambda!',\n input: event\n }),\n };\n\n return response; // AWS Lambda espera un valor de retorno\n};\n\n\nEn este ejemplo simple, la función recibe un evento y devuelve una respuesta JSON. Si la función se invoca a través de API Gateway, event contendrá el método HTTP, los encabezados, el cuerpo de la solicitud, etc.
Importante: Utilice siempre async/await para operaciones asíncronas (consultas a bases de datos, API). Si la función no es asíncrona, debe devolver una Promise o usar un callback.
2. Disparadores e integraciones
\n\nEl poder de Lambda se revela a través de los disparadores: eventos de otros servicios de AWS que ejecutan su función. Veamos las tres opciones más populares en JavaScript.
\n\n2.1. Solicitudes HTTP a través de API Gateway
\nEste es el escenario más común para crear una API REST. Adjunta un disparador API Gateway a Lambda. En este caso, event contendrá la estructura de la solicitud HTTP. Ejemplo de procesamiento:
exports.handler = async (event) => {\n const httpMethod = event.httpMethod;\n const path = event.path;\n const queryParams = event.queryStringParameters || {};\n const body = event.body ? JSON.parse(event.body) : {};\n\n console.log(`Método: ${httpMethod}, Ruta: ${path}`);\n\n if (httpMethod === 'GET' && path === '/hello') {\n return {\n statusCode: 200,\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ message: `¡Hola, ${queryParams.name || 'mundo'}!` })\n };\n }\n\n return {\n statusCode: 404,\n body: JSON.stringify({ error: 'No encontrado' })\n };\n};\n\n\n2.2. Procesamiento de archivos desde S3
\nLambda puede activarse automáticamente al cargar o eliminar archivos en un bucket de S3. Esto es ideal para crear miniaturas de imágenes, convertir vídeos o indexar datos.
\n\nconst AWS = require('aws-sdk');\nconst s3 = new AWS.S3();\n\nexports.handler = async (e