No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Aprovecha el precio especial y haz tu profesi贸n a prueba de IA

Antes: $249

Currency
$209
Suscr铆bete

Termina en:

0 D铆as
3 Hrs
41 Min
49 Seg

UPDATE para actualizar datos

16/25
Recursos

驴C贸mo integrar updates en una aplicaci贸n serverless con DynamoDB?

La integraci贸n y actualizaci贸n de datos en una aplicaci贸n serverless con DynamoDB es un componente esencial que te permitir谩 tener un sistema CRUD totalmente funcional. Hasta este punto, hemos cubierto los m茅todos de creaci贸n y consulta. La l贸gica de actualizaci贸n tiene sus propios matices, y aqu铆 te llevaremos paso a paso para implementar el m茅todo update usando Amazon DynamoDB con lambda functions.

驴C贸mo estructurar el proyecto para implementar la funci贸n update?

Para comenzar, debes contar con una estructura de carpetas adecuada. Crea una carpeta llamada updateUsers donde incluir谩s un archivo handler.js. Es importante modificar el serverless.yml para a帽adir una nueva funci贸n lambda que representar谩 la funcionalidad de updateUsers. Recuerda:

  • Actualizar el nombre de la funci贸n: Cambia el nombre en el archivo de configuraci贸n serverless.yml.
  • Definir el handler correspondiente: Aseg煤rate de que el handler apunta al archivo handler.js dentro de tu carpeta updateUsers.
  • Seleccionar el m茅todo HTTP correcto: Seg煤n las buenas pr谩cticas de DynamoDB, utiliza el m茅todo HTTP PATCH para las actualizaciones.

驴C贸mo hacer el refactoring del c贸digo para el update?

Un punto crucial al implementar la funci贸n de update es el refactoring del c贸digo base. A continuaci贸n, te explico c贸mo hacerlo:

  1. Obtener los par谩metros necesarios: La funci贸n toma un ID desde la URL y un body que contiene los datos que se deben actualizar.

    const userId = // obtener ID de la URL
    const body = JSON.parse(event.body); // parsear el body para usarlo
    
  2. Configurar los params de DynamoDB: Adaptar los par谩metros necesarios, incluyendo UpdateExpression, ExpressionAttributeNames, y ExpressionAttributeValues.

    const params = {
        TableName: 'users_table',
        Key: { 'userId': userId },
        UpdateExpression: 'SET #name = :name',
        ExpressionAttributeNames: { '#name': 'name' },
        ExpressionAttributeValues: { ':name': body.name }
    };
    
  3. Hacer el update llamado: Cambia la l贸gica para realizar la operaci贸n de update que incorpore los par谩metros previamente configurados.

Esto te permitir谩 actualizar los datos seg煤n los inputs proporcionados en el body de la solicitud.

驴C贸mo desplegar la funci贸n lambda actualizada?

Una vez que tu l贸gica est谩 lista, es hora de desplegar la funci贸n. Usa el comando serverless deploy para iniciar el despliegue. Este proceso es sencillo y automatizado gracias a las capacidades del framework serverless.

Mira c贸mo se despliega una funci贸n lambda:

serverless deploy

Despu茅s de un despliegue exitoso, utiliza herramientas como Postman para verificar que la aplicaci贸n efectivamente realiza las actualizaciones sobre los registros de DynamoDB. Aseg煤rate de proporcionar el ID correcto y un body en formato JSON.

驴Cu谩l es el siguiente paso?

Ahora que tienes una aplicaci贸n parcialmente completa con create, read, y update, el siguiente paso ser谩 implementar la funcionalidad de delete para completar el ciclo CRUD. Mantente atento a la pr贸xima clase donde exploraremos c贸mo eliminar registros utilizando lambda functions.

En cada paso del camino, vamos construyendo un sistema cada vez m谩s robusto y eficiente que se aprovecha de la escalabilidad y facilidad de implementaci贸n que AWS y el framework serverless ofrecen. 隆Sigue adelante y comparte tus experiencias con la comunidad!

Aportes 5

Preguntas 0

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

Mi funci贸n par actualizar tanto name como tel茅fono:

const aws = require("aws-sdk")

let dynamoDbClientParams = {}



const dynamodb = new aws.DynamoDB.DocumentClient(dynamoDbClientParams)


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

  let userId = event.pathParameters.id

  const body = JSON.parse(event.body)
  const params = {
    TableName: 'usersTable',
    Key: { pk: userId },
    UpdateExpression: "set #name = :name, #telefono = :telefono",
    ExpressionAttributeNames : {"#name":"name", "#telefono": "telefono"},
    ExpressionAttributeValues: { ':name': body.name, ":telefono": body.telefono },
    ReturnValues: "ALL_NEW"
  }

  return dynamodb.update(params)
    .promise()
    .then(res => {
      console.log(res)
      return {        
          "statusCode": 200,
          "body": JSON.stringify({"user": res})        
      }
    })
}


module.exports = {
  updateUsers
}

Con ayuda de ChatGPT cre茅 una funci贸n que genera un objeto params para el update, tal que sea posible actualizar una cantidad arbitraria de propiedades. Este fue el resultado.

function makeUpdateParams(tableName, key, attributesToUpdate) {
  const ExpressionAttributeNames = {};
  const ExpressionAttributeValues = {};
  let UpdateExpression = "SET ";

  // For each attribute to update, add it to the UpdateExpression and build the ExpressionAttributeNames and ExpressionAttributeValues objects
  Object.entries(attributesToUpdate).forEach(
    ([attributeName, attributeValue]) => {
      const keyName = `#${attributeName}`;
      const valueName = `:${attributeName}`;
      UpdateExpression += `${keyName} = ${valueName}, `;
      ExpressionAttributeNames[keyName] = attributeName;
      ExpressionAttributeValues[valueName] = attributeValue;
    }
  );

  // Remove the trailing comma and space from the UpdateExpression
  UpdateExpression = UpdateExpression.slice(0, -2);

  // Build the params object with the tableName, key, UpdateExpression, and ExpressionAttributeNames and ExpressionAttributeValues objects
  const params = {
    TableName: tableName,
    Key: { pk: key },
    UpdateExpression,
    ExpressionAttributeNames,
    ExpressionAttributeValues,
    ReturnValues: "ALL_NEW",
  };

  return params;
}

Consejos

  • En mi caso, antes de hacer el sls deploy me gusta hacer todas las pruebas con sls offline server para corregir todo en local en caso de haber fallas y una vez validado si mandar todo a la nube. As铆 evitamos constantemente hacer actualizaciones al stack de CloudFormation (lo cual resulta un poco lento y genera peque帽os costos innecesarios).

  • Por otro lado, les recomiendo mucho a los que usan Insomnia (creo que debe haber una manera en Postman) crear estos entornos, para siempre hacer llamados a las mismas direcciones y solo cambiando el URL de la API de acuerdo a desarrollo o producci贸n:

  • As铆 va mi DynamoDB por ahora:

  • Mi GitHub

As铆 va quedando mi tabla 馃槂

note que si le paso un id que no existe en la db la crea y para evitar esto agregue en los params ConditionExpression: "attribute\_exists(pk)"