Actualización de Usuarios en DynamoDB con Serverless Framework

Clase 16 de 25Curso de Serverless Framework en AWS

Contenido del curso

Desarrollando con Serverless Framework

Resumen

Construir una operación de actualización en una arquitectura serverless requiere combinar la lógica de un GET (obtener el ID del registro) con la de un POST (enviar un body con datos nuevos). Aquí se explica paso a paso cómo lograrlo usando AWS Lambda, DynamoDB y Serverless Framework, completando así la tercera pieza del CRUD (acrónimo de Create, Read, Update, Delete) que toda aplicación necesita.

¿Cómo preparar la estructura de carpetas y el serverless.yml para el update?

El punto de partida es la función get users que ya existía en el proyecto. A partir de ella se crea una nueva carpeta llamada update-users con su propio handler [01:05]. Dentro del archivo serverless.yml se registra esta tercera función Lambda indicando:

  • El nombre de la función: updateUsers.
  • El handler apuntando a la nueva carpeta y archivo.
  • El método HTTP: en este caso se utiliza PATCH [01:52].

El método PATCH es la práctica recomendada por la documentación de DynamoDB y otros frameworks cuando se trata de actualizaciones parciales de un registro, a diferencia de PUT, que reemplaza el recurso completo. También es necesario agregar el parámetro /{id} en la ruta del endpoint, tal como se definió para el get user, ya que sin él la API Gateway devuelve un error 403 [07:42].

¿Qué sintaxis necesita DynamoDB para actualizar un registro?

DynamoDB utiliza una estructura de parámetros específica que puede parecer compleja al principio, pero ofrece gran flexibilidad en casos de uso avanzados [03:30]. El objeto params que se envía al método update incluye:

  • TableName: el nombre de la tabla, por ejemplo usersTable.
  • Key: un objeto JSON con el primary key del registro, en este caso el userId obtenido desde la URL con event.pathParameters.
  • UpdateExpression: un string que indica qué atributos modificar, usando la sintaxis SET #name = :name [04:05].
  • ExpressionAttributeNames: mapea los alias definidos en la expresión (como #name) al nombre real del atributo en la tabla.
  • ExpressionAttributeValues: asigna los valores concretos a los marcadores (como :name), tomándolos del body de la petición con body.name [06:10].
  • ReturnValues: se configura como "ALL_NEW" para que DynamoDB devuelva el registro completo ya actualizado [05:35].

Un detalle importante es el JSON.parse aplicado al event.body [03:05]. El body que llega al Lambda viene como string crudo, por lo que es necesario parsearlo antes de acceder a sus propiedades.

¿Cómo se reemplaza el query por un update en el código?

En la línea donde antes se ejecutaba un query de DynamoDB, ahora se invoca el método update pasándole el objeto params completo [05:50]. La respuesta del update incluye los atributos modificados, lo que permite confirmar al cliente exactamente qué cambió.

¿Qué pasa si el body no se conecta con los params?

Durante la construcción del código se cometió un error real: el body se definió pero no se utilizó dentro de ExpressionAttributeValues. El valor del nombre quedaba estático en lugar de tomar body.name [06:10]. Este tipo de descuido es frecuente y sirve como recordatorio de que cada variable declarada debe tener una referencia activa en la lógica.

¿Cómo desplegar y probar el update con Postman?

El despliegue se realiza con el comando serverless deploy [06:40], que empaqueta el código en un archivo .zip, lo sube a AWS y actualiza el stack de CloudFormation. Este stack orquesta automáticamente la creación de todos los recursos necesarios: la función Lambda, los permisos y el endpoint en API Gateway [08:30].

Para probar en Postman [07:05]:

  • Se selecciona el método PATCH.
  • Se agrega el ID del usuario al final de la URL.
  • Se envía un body en formato JSON con el nuevo valor, por ejemplo {"name": "Georgeshagi profe Serverless"}.
  • La respuesta confirma la actualización en milisegundos y retorna el objeto modificado [09:25].

Es posible que exista un pequeño delay entre el despliegue y la disponibilidad completa del endpoint; tras un par de minutos todo funciona con normalidad.

Si llegaste hasta aquí, comparte en los comentarios cómo adaptarías la lógica para actualizar otros campos como el teléfono en lugar del nombre, y muestra una captura de los registros almacenados en tu tabla DynamoDB.