Serverless Framework con DynamoDB: Ejemplo En Proyecto Real

Serverless Framework con DynamoDB: Ejemplo En Proyecto Real

¿Qué es Serverless Framework?

Building a Serverless API on AWS: Writing and Querying Data with API Gateway, Lambda, and DynamoDB

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:

  1. Simplificación de Despliegue: Serverless Framework permite configurar DynamoDB junto con funciones Lambda en un solo archivo, asegurando una integración perfecta.
  2. Escalabilidad Automática: DynamoDB escala automáticamente según la carga, mientras que Serverless Framework despliega funciones sin preocuparse por servidores o infraestructura.
  3. Costos Reducidos: DynamoDB y las funciones serverless utilizan modelos de pago por uso, eliminando costos por recursos infrautilizados.
  4. Velocidad de Desarrollo: Al abstraer la gestión de infraestructura, los desarrolladores pueden iterar y entregar funcionalidades más rápidamente.
  5. 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:

  1. Crear tareas.
  2. Consultar la lista de tareas.
  3. Actualizar tareas existentes.
  4. Eliminar tareas.

Utilizaremos AWS Lambda, API Gateway y DynamoDB, desplegando todo con el Serverless Framework.

Estructura del Proyecto

  1. Archivo serverless.yml: Define las funciones Lambda, la tabla DynamoDB y los eventos asociados.
  2. Código de las Funciones Lambda: Contiene la lógica para interactuar con DynamoDB.
  3. 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:

				
					npm install serverless -g  
npm install uuid aws-sdk  
				
			

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:

Facebook
X
LinkedIn
Reddit
Pinterest
Threads

Post relacionados

Post recientes

Search