Funciones Serverless en JavaScript: AWS Lambda de la A a la Z

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: ¿Qué es Serverless y AWS Lambda?

\n\n

Serverless (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\n

AWS 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\n

En 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\n

Parte principal: Creación y gestión de funciones Lambda en Node.js

\n\n

1. Creación de la primera función Lambda

\n\n

Vaya 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).

\n\n

La estructura básica de una función en Node.js se ve así:

\n\n
exports.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\n

En 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.

\n\n

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.

\n\n

2. Disparadores e integraciones

\n\n

El 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\n

2.1. Solicitudes HTTP a través de API Gateway

\n

Este 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:

\n\n
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\n

2.2. Procesamiento de archivos desde S3

\n

Lambda 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\n
const AWS = require('aws-sdk');\nconst s3 = new AWS.S3();\n\nexports.handler = async (e                

Blogs

Book Recommendations