No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Recapitulación de la aplicación y método GET

12/25
Recursos

¿Cómo iniciar un proyecto serverless con DynamoDB?

Adentrarse en el mundo del desarrollo serverless puede parecer un reto, pero con las herramientas adecuadas, es un camino más accesible del que muchos piensan. Este artículo te guía a través de la implementación inicial de un proyecto serverless utilizando AWS API Gateway, Lambda y DynamoDB en un entorno simulado localmente.

¿Qué integra nuestro ecosistema serverless?

El ecosistema que estamos construyendo tiene varios componentes esenciales:

  1. Usuario: El punto de entrada para las llamadas vía HTTP.
  2. API Gateway: Maneja las solicitudes entrantes al sistema.
  3. Lambdas: Funciones que realizan operaciones específicas, conectadas a la base de datos.
  4. DynamoDB: Una base de datos serverless, ideal para este proyecto.

La administración de estos elementos se realiza a través de Serverless Framework, garantizando que todo nuestro despliegue sea coherente y eficiente.

¿Cuáles son los primeros pasos?

Para comenzar, consideramos una refactorización del proyecto existente:

  • Renombrar directorios y funciones: Cambiar los nombres a algo más descriptivo y acorde a la función que realizarán, como GetUsers.
  • Modificar el archivo serverless.yaml: Adaptarlo a los nuevos nombres y funcionalidades, asegurando una estructura clara y consistente.

¿Cómo se integra DynamoDB mediante AWS-SDK?

Para interactuar con DynamoDB, es necesario instalar el “AWS-SDK”:

npm install aws-sdk --save-dev

Posteriormente, configurar un cliente de DynamoDB para manejar las consultas:

const AWS = require('aws-sdk');
const DynamoDB = new AWS.DynamoDB.DocumentClient();

Esta integración facilita la creación de queries y garantiza una comunicación efectiva con la base de datos.

¿Cómo se estructuran las consultas y el endpoint?

Definimos el handler getUsers para gestionar las peticiones HTTP:

module.exports.getUsers = async (event) => {
  const params = {
    TableName: 'CRUDServerlessUsers',
    KeyConditionExpression: 'pk = :pk',
    ExpressionAttributeValues: {
      ':pk': 1,
    },
  };

  try {
    const res = await DynamoDB.query(params).promise();
    return {
      statusCode: 200,
      body: JSON.stringify({ user: res.Items }),
    };
  } catch (error) {
    return {
      statusCode: 500,
      body: JSON.stringify({ error: error.message }),
    };
  }
};

¿Cuáles son las claves del desarrollo local con serverless offline?

Probar localmente tu aplicación es crucial para asegurar un correcto funcionamiento antes de migrar a producción. Siguientes pasos:

  • Instala y configura el plugin serverless-offline.
  • Ejecuta el servidor local con el comando:
serverless offline start

Este comando simula el comportamiento de API Gateway y Lambda en tu entorno local.

¿Cómo abordar errores comunes en el desarrollo?

El manejo de errores es parte del proceso de aprendizaje. Algunos errores típicos incluyen:

  • Errores de nombres de handlers: Verifica que los nombres coincidan entre tu código y la configuración.
  • Keys invalidas en DynamoDB: Asegúrate de que las condiciones y expresiones sean correctas.
  • Recursos no encontrados: Confirma que tanto tu base de datos como tus tablas existan y estén correctamente referenciadas.

¿Qué sigue después de la configuración inicial?

Después de establecer la lógica básica, el siguiente paso es crear la base de datos en DynamoDB y optimizar el rendimiento de las queries. Es importante seguir investigando y formándote en esta área para perfeccionar tus habilidades en el desarrollo serverless.

El mundo serverless es vasto y ofrece infinitas oportunidades para desarrolladores que buscan eficiencia y escalabilidad. No dudes en continuar explorando y experimentando con nuevas tecnologías y estrategias dentro de este emocionante ecosistema.

Aportes 7

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Publiqué una plantilla para la API. Pueden usarla para crear un nuevo proyecto.

serverless create --path api-crud --template-url https://github.com/juliosarango/serverless-api-template
 var params = {
        ExpressionAttributeValues: { ':pk': '1' },
        KeyConditionExpression: 'pk = :pk',
        TableName: 'crud-serverless-users-table'
    };
A la fecha, ya liberaron la versión v3 del SDK de AWS. Ahora pueden traer el cliente individual con: `npm install @aws-sdk/client-dynamodb` Dejo el link de la documentación: <https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/dynamodb/>

Yo ajuste un poco el codigo para poder tener un response y poderlo editar en cualquier parte del codigo

const aws = require('aws-sdk');
const dynamonDB = new aws.DynamoDB.DocumentClient();

const getUsers = async (event, context) => {


    const response = {
        "statusCode": 200,
        "body": ''
    }

    let params = {
        ExpressionAttributeValues: { ':pk': '1' },
        KeyConditionExpression: 'pk = :pk',
        TableName: 'crud-serverless-users-table'
    };

    dynamonDB.query(params).promise().then(res =>{
        console.log(res);
        response.statusCode = 201;
        response.body = {'user': res};
    })

    response.body = JSON.stringify(response.body);

    return response
}

module.exports = {
    getUsers
}

Plugin example: I found a plugin called `[Serverless Prune Plugin](https://www.serverless.com/plugins/serverless-prune-plugin#serverless-prune-plugin)` Every time you run `sls deploy` Your lambda gets updated if there's any change. In the lambda settings (In your AWS console) you will find that there's a section called "Versions" In that section, AWS saves an immutable capture of your function every time you updated it The problem is that the number of versions can grow out of hand rather quickly. With `sls prune` you will be able to delete those versions and have just the most recent one.

Error:

NOTE: The AWS SDK for JavaScript (v2) will be put into maintenance mode in 2023

Solución:

npm uninstall aws-sdk

npm install aws-sdk@2.729.0