¿Cómo corregir errores al trabajar con DynamoDB local?
Cometer errores es parte del proceso de aprendizaje. Entender por qué ocurren y cómo solucionarlos fortalece nuestras habilidades. Al intentar ejecutar un cliente de DynamoDB en local, uno puede encontrar errores si el recurso buscado no está disponible. En este caso, el error surgía porque el cliente intentaba conectarse a una base de datos en la nube de Amazon, mientras que la prueba se realizaba localmente. Afortunadamente, existe una solución: usar DynamoDB local.
¿Cómo trabajar con DynamoDB local?
DynamoDB local es un plugin que permite ejecutar las bases de datos en local. Esto es especialmente útil cuando deseas evitar conectarte a la nube mientras desarrollas y pruebas en tu propia máquina. Para trabajar con DynamoDB local, primero necesitas asegurarte de contar con Java Runtime Environment (JRE) instalado, ya que simula la base de datos usando Java. A continuación, sigue estos pasos:
Instalación del plugin: Utiliza npm para instalar DynamoDB local. Este paso es esencial para integrar el plugin a la configuración de serverless.
npminstall serverless-dynamodb-local --save
Agregar el plugin a serverless: Edita tu archivo serverless.yaml para incluir el nuevo plugin. Aquí es donde puedes tener múltiples plugins si lo deseas.
plugins:- serverless-dynamodb-local
Instalación de la base de datos: Una vez agregado el plugin, debes instalar la base de datos usando un comando específico proporcionado por el plugin.
serverless dynamodb install
¿Cómo configurar el plugin?
Configurar adecuadamente DynamoDB local es clave para que funcione correctamente. La configuración del plugin se realiza en la sección personalizada de serverless.yaml. Aquí defines cómo interactuará el plugin con tu aplicación:
Añadir configuración custom: Copia y pega el siguiente fragmento en tu serverless.yaml:
Este setup asegura que la base de datos local esté en memoria, prevaleciendo la eficiencia al realizar pruebas.
¿Cómo definir recursos con CloudFormation?
El plugin no actúa como la base de datos en sí, por lo que debes definirla en la sección de recursos del archivo serverless.yaml usando syntaxis de CloudFormation. Este proceso será explorado en cursos avanzados, pero para los propósitos actuales, puedes simplemente copiar el fragmento proporcionado en la documentación:
Por último, corrige la configuración del cliente de DynamoDB para que no busque la base de datos en la nube, sino en local:
Configura el cliente: Modifica el cliente de DynamoDB para que apunte a tu propia máquina. Asegúrate de revisar la documentación para obtener el código correcto.
const client = new AWS.DynamoDB.DocumentClient({ region:"localhost", endpoint:"http://localhost:8000", accessKeyId:"fakeMyKeyId", secretAccessKey:"fakeSecretAccessKey",});
Reinicia serverless offline: Vuelve a iniciar serverless offline para probar la aplicación y verifica que el error desapareció.
serverless offline start
Con estos pasos, tu aplicación debería funcionar correctamente en local, interactuando efectivamente con DynamoDB local. ¡Continúa explorando y afianzando tu conocimiento para desplegar tu aplicación en la nube!
Configuración y uso de DynamoDB Local con Serverless
Tambien me paso, yo estaba usando sls v4.21 y lo que pasa es que el plugIn que enseñan en este curso ya no es compatible con esta version, probablemente sea tu error, el plugIn actrual lo instalas con: npm install --save-dev serverless-dynamodb
El curso no esta mal pero serverles cambio demasiado rapido mucho del curso quedo o desactualizado y toca ponerse a investigar y las herramientas que usan ya no son el estandar del mercado. Ejempo ya es mejor local stack o aws sam local
Hola Oscar, es exactamente el mismo ejemplo de la clase? puedes compartirnos tu repositorio para revisar el código? :rocket:
Adicionalmente, nos puedes confirmar si realizaste la configuración de DynamoDB en local? este error puede estar asociado a DynamoDB.
En caso de que tengas tiempo para revisarlos sincronamente lo podemos ver en el Discord de Platzi, en el canal #cloud
Lo que a mi me ayudo fue quitar serverless-dynamodb-local y agregar serverless-dynamodb.
En el punto yaml reemplazar la antigua libreria con la nueva y funciona bien
El error que estás experimentando indica que hay un problema de permisos al intentar iniciar el servidor local de Serverless Offline en el puerto 3000. Puedes intentar solucionarlo siguiendo estos pasos:
Verifica que no haya otro proceso en ejecución que esté utilizando el puerto 3000. Puedes intentar cambiar el puerto en la configuración de tu servidor local para evitar conflictos.
Asegúrate de tener los permisos adecuados para ejecutar aplicaciones en el puerto 3000. Dependiendo del sistema operativo que estés utilizando, puede que necesites ejecutar el comando con privilegios de administrador o superusuario. Si estás en un entorno Linux o macOS, puedes probar a ejecutar el comando con "sudo" al principio.
Si estás utilizando un sistema operativo basado en Unix (Linux, macOS), también puedes intentar cambiar el puerto a un número mayor a 1024, ya que los puertos por debajo de ese número suelen requerir permisos especiales.
Otro enfoque es verificar si hay algún firewall o software de seguridad que esté bloqueando el acceso al puerto 3000. Desactivar temporalmente cualquier software de seguridad puede ayudarte a determinar si ese es el problema.
dynamodb local es casi que imposible instalar y ejecutar llevo 2. fias tratando haciendo todos los aportes y termina con un error que el porte 8000 está siendo utilizado la verdad. el curso creo q falta actualizar. si es que ya hacy cosas nuevas
Mira te dejo el PDF , tiene una duracion de 30 dias, cualquier cosa puedes buscarme por twitter como @alexinaraujo
PDF
A alguien más le aparece algo así? :(
Error:TypeError:Cannot read properties ofundefined(reading 'dynamodb') at newServerlessDynamodbLocal(/Users/selenebautista/Generator/getusers/node_modules/serverless-dynamodb/index.js:13:112) at PluginManager.addPlugin(/Users/selenebautista/Generator/getusers/node_modules/serverless/lib/classes/plugin-manager.js:91:28) at /Users/selenebautista/Generator/getusers/node_modules/serverless/lib/classes/plugin-manager.js:137:69 at Array.forEach(<anonymous>) at PluginManager.loadAllPlugins(/Users/selenebautista/Generator/getusers/node_modules/serverless/lib/classes/plugin-manager.js:137:44) at asyncServerless.init(/Users/selenebautista/Generator/getusers/node_modules/serverless/lib/serverless.js:146:5) at async /Users/selenebautista/Generator/getusers/node_modules/serverless/scripts/serverless.js:601:7```