Serverless Framework con DynamoDB: Ejemplo En Proyecto Real
¿Qué es Serverless Framework?
El Serverless Framework es una herramienta de código abierto que permite crear y desplegar aplicaciones sin servidores en plataformas de nube como AWS, Google Cloud, y Microsoft Azure. Su principal ventaja radica en abstraer la complejidad del manejo de infraestructura, permitiendo a los desarrolladores centrarse en el código y la lógica de negocio.
Al utilizar Serverless Framework, se configuran funciones, eventos y recursos en un archivo YAML centralizado, simplificando el despliegue y mantenimiento de las aplicaciones.
¿Qué es DynamoDB?
DynamoDB es un servicio de base de datos NoSQL de Amazon Web Services (AWS) diseñado para aplicaciones de alto rendimiento. Es completamente gestionado, escalable, y ofrece baja latencia, lo que lo convierte en una opción ideal para sistemas modernos.
Al ser una base de datos serverless, DynamoDB se adapta perfectamente a aplicaciones que requieren escalabilidad automática, alta disponibilidad y una estructura de datos flexible, como aplicaciones web, juegos, análisis en tiempo real, y más.
Importancia de Usar Serverless Framework con DynamoDB
El uso de Serverless Framework y DynamoDB juntos aporta numerosos beneficios:
- Simplificación de Despliegue: Serverless Framework permite configurar DynamoDB junto con funciones Lambda en un solo archivo, asegurando una integración perfecta.
- Escalabilidad Automática: DynamoDB escala automáticamente según la carga, mientras que Serverless Framework despliega funciones sin preocuparse por servidores o infraestructura.
- Costos Reducidos: DynamoDB y las funciones serverless utilizan modelos de pago por uso, eliminando costos por recursos infrautilizados.
- Velocidad de Desarrollo: Al abstraer la gestión de infraestructura, los desarrolladores pueden iterar y entregar funcionalidades más rápidamente.
- Ecosistema AWS: La integración nativa entre Lambda, API Gateway y DynamoDB garantiza un flujo de trabajo eficiente y optimizado para proyectos serverless.
Interacción Entre Serverless Framework y DynamoDB
La interacción entre ambos se da a través de funciones Lambda que procesan datos almacenados en DynamoDB. Estas funciones actúan como el intermediario entre el usuario final y la base de datos, permitiendo operaciones como crear, leer, actualizar y eliminar elementos.
La configuración se realiza mediante un archivo serverless.yml
, que define las funciones Lambda, los permisos de acceso a DynamoDB y los endpoints necesarios para interactuar con la aplicación.
Ejemplo de Proyecto Real: API de Gestión de Tareas
Descripción del Proyecto
Vamos a construir una API de gestión de tareas donde los usuarios pueden:
- Crear tareas.
- Consultar la lista de tareas.
- Actualizar tareas existentes.
- Eliminar tareas.
Utilizaremos AWS Lambda, API Gateway y DynamoDB, desplegando todo con el Serverless Framework.
Estructura del Proyecto
- Archivo
serverless.yml
: Define las funciones Lambda, la tabla DynamoDB y los eventos asociados. - Código de las Funciones Lambda: Contiene la lógica para interactuar con DynamoDB.
- Tabla DynamoDB: Configurada para almacenar tareas con un identificador único.
Archivo serverless.yml
service: task-manager-api
provider:
name: aws
runtime: nodejs18.x
region: us-east-1
resources:
Resources:
TaskTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: TaskTable
AttributeDefinitions:
- AttributeName: id
AttributeType: S
KeySchema:
- AttributeName: id
KeyType: HASH
BillingMode: PAY_PER_REQUEST
functions:
createTask:
handler: handlers/createTask.handler
events:
- http:
path: tasks
method: post
getTasks:
handler: handlers/getTasks.handler
events:
- http:
path: tasks
method: get
updateTask:
handler: handlers/updateTask.handler
events:
- http:
path: tasks/{id}
method: put
deleteTask:
handler: handlers/deleteTask.handler
events:
- http:
path: tasks/{id}
method: delete
Código de la Función Lambda para Crear Tareas (createTask.js
)
const AWS = require('aws-sdk');
const { v4: uuidv4 } = require('uuid');
const dynamoDb = new AWS.DynamoDB.DocumentClient();
module.exports.handler = async (event) => {
const data = JSON.parse(event.body);
const params = {
TableName: 'TaskTable',
Item: {
id: uuidv4(),
title: data.title,
description: data.description,
status: 'pending',
},
};
try {
await dynamoDb.put(params).promise();
return {
statusCode: 201,
body: JSON.stringify({ message: 'Task created', task: params.Item }),
};
} catch (error) {
return {
statusCode: 500,
body: JSON.stringify({ error: 'Could not create task' }),
};
}
};
Despliegue y Prueba
1. Instalar dependencias del proyecto:
npm install serverless -g
npm install uuid aws-sdk
2. Desplegar la aplicación:
serverless deploy
3. Probar la API: Utilizar herramientas como Postman para interactuar con los endpoints.
Conclusión
El uso de Serverless Framework con DynamoDB permite construir aplicaciones altamente escalables y de bajo costo, ideales para proyectos que necesitan manejar cargas variables o trabajar bajo demanda. La integración nativa de ambas herramientas asegura flujos de trabajo optimizados, mientras que el enfoque serverless reduce la complejidad de gestión de infraestructura.
Implementar este enfoque en proyectos reales, como la API de gestión de tareas, permite aprovechar al máximo las ventajas de la arquitectura sin servidores, haciendo que el desarrollo sea más ágil, eficiente y alineado con las necesidades modernas.
Referencias: