dynamodb_aws
v1.0.2
Published
conector dynamodb para node js para uso complementario de mvserver_express
Downloads
201
Maintainers
Readme
dynamodb_aws
Este módulo se destina al uso de nuestro handler de controladores y apis mvserver_express, este módulo se centra en conectar a DynamoDB y elaborar tablas. Este conector te facilita el uso de un CRUD en caso de usar esta base de datos no relacional de AWS.
Documentacion del uso e integracion con el modulo mvserver_express
A continuación te explicaré como podemos integrar este módulo y sus diferentes métodos para poder hacer CRUD. El modulo esta destinado para realizar lambda function en node js, simplifica la logica y disminuye el tiempo de desarrollo en las diferentes acciones, conexiones a base de datos y manejo de errores de tu funcion.
Pasos para la configuracion del MvServer
- la esructura de tu lambda funcion debe ser la siguiente ve a su Documentación oficial
- en la raiz de tu espacio de trabajo crear una carpeta con nombre source dentro de esta deberas crear una sub-carpetas con los siguientes nombres
- source/collector
- config/config.collector.js
- config/config.lambda.js
- config/config.dynamo.js
Los config deben estar estructurados de la siguiente manera
config.collector.js
Este archivo lleva las especificaciones de tu collect, como el modulo de base de datos que vas a usar, la ruta en donde definiras tus collectores,el tipo de base de datos, el nombre del modulo de base de datos y la funcion inicial de tu modulo.
const { dynamodb } = require("../../dynamodb_aws/index");
const { ErrorHandler } = require("../dictionary/errors/error-lambda");
const path = require('path');
module.exports = {
dictionaryError: ErrorHandler,
PATHCOLLECTOR: path.join(__dirname, '../source/collector'),
type: "db",
db: "dynamodb",
module: function () {
return dynamodb()
}
}
config.lambda.js
Aqui colocaras tu cors en caso de llevar y los metodos que estaras manejando en tu lambda
module.exports = {
cors_api: "localhost",
methods: "OPTIONS,POST,GET,PUT"
}
config.dynamo.js
esta parte esta la parammetrizacion de tu base de datos, este ejemplo es con el modulo oficial de mongodb para mvserver
module.exports = {
user: process.env.USER_DYN,
password: process.env.PASSWORD_DYN,
region: process.env.REGION
}
Se manjan las variables de entorno en este caso, tambien podrias manejar los kms en aws para guardar estos keys como gustes.
source/collector
Aqui tendras la lista de conectores y las acciones que quieres hacer en tu api
const config = require('../../config/config.dynamodb');
const serverdb = {
user: config.user,
password: config.password,
region: config.region,
table: "users"
};
const schemaUsers = {
name: { type: String, require: true },
id_user:{type: String, require: true},
type: { type: String, require: true }
};
fastserver.collector("collector-add-users", {
type: "db",
action: "dynamodb",
server: serverdb,
queryType: "add",
schema: {}
});
Parámetros de configuración
A continuación se describe el uso de cada uno de los parámetros en la configuración:
1. type: "db"
- Descripción: Define el tipo de servicio con el que estamos trabajando. En este caso, "db" indica que se está trabajando con una base de datos.
- Ejemplo:
"db"
2. action: "dynamodb"
- Descripción: Especifica la acción que se realizará con la base de datos. En este caso, "dynamodb" indica que se va a realizar una operación con DynamoDB, el servicio de base de datos no relacional de AWS.
- Ejemplo:
"dynamodb"
3. server: serverdb
- Descripción: Contiene la configuración del servidor de la base de datos. Este objeto define las credenciales, la región y la tabla de DynamoDB a la que se realizará la conexión.
- Ejemplo:
serverdb = { user: "your-aws-access-key", password: "your-aws-secret-key", region: "us-east-1", // Región de AWS table: "your-table-name" // Nombre de la tabla en DynamoDB }
4. queryType: "add"
- Descripción: Define el tipo de operación que se realizará en DynamoDB. En este caso, "add" indica que se está realizando una operación de inserción de datos en la base de datos.
- Ejemplo:
"add"
5. schema: {}
- Descripción: Contiene la estructura o esquema de los datos que se van a insertar, actualizar o consultar en la base de datos. Este parámetro se utiliza para validar los datos antes de que sean procesados.
- Ejemplo:
schema = { name: { type: String, required: true }, age: { type: Number, required: true } }
- Nota: El esquema define los campos que deben estar presentes en los datos y sus tipos, si colocas el schema en blanco {} el mismo no validara los valores nio tipos de datos.
los diferentes comando para el QueryType son:
- add: Agregar nuevo item
- delete: borrar un item por si primary_key
- get: obtine un valor en especifico por su primary
- scan: Muestra todos los registros en la db
- update: Actualiza campos de una tabla
- query: se utiliza para realizar consultas específicas en una tabla o índice secundario, basándose en el valor de una clave primaria (Primary Key). Este método es ideal para recuperar elementos cuando tienes una Partition Key específica, y opcionalmente, puedes usar una Sort Key para filtrar aún más los resultados.
Observacion
El metodo update maneja una estrcutura para poder hacer el cambio de cualquier informacion
```javascript
{
"filter":{"bussinesid":"VK4bUns21XTC45raf4kDH4DlyRT2"},// id primary key definido en tu tabla de dynamodb
"UpdateExpression":"set #name_bussines = :name_bussines", // Ejemplo: "set #status = :status"
"ExpressionAttributeNames":{
"#name_bussines": "name_bussines" // Ejemplo: { "#status": "status" }
},
"ExpressionAttributeValues":{
":name_bussines": "X-SMART-DEVELOP" // { ":status": "Active" }
}
}
```
Metodo query
El método Query en DynamoDB se utiliza para realizar consultas específicas en una tabla o índice secundario, basándose en el valor de una clave primaria (Primary Key). Este método es ideal para recuperar elementos cuando tienes una Partition Key específica, y opcionalmente, puedes usar una Sort Key para filtrar aún más los resultados.
Características principales de Query:
- Búsqueda eficiente:
Query solo escanea los datos dentro de una partición específica, lo que lo hace mucho más eficiente que el método Scan, que recorre toda la tabla. Claves necesarias: 1. Requiere una Partition Key (obligatoria). 2. Puede incluir una condición adicional con la Sort Key (si la tabla tiene una Sort Key definida).
- Filtros adicionales:
Puedes aplicar filtros (FilterExpression) para afinar los resultados que ya cumplieron con la consulta principal. Nota: Los filtros no afectan el rendimiento porque la base de datos primero evalúa la KeyConditionExpression y luego aplica los filtros. Índices secundarios:
Puedes usar el método Query no solo en la tabla principal, sino también en Índices Secundarios Locales (LSI) o Índices Secundarios Globales (GSI) para realizar consultas alternativas basadas en diferentes combinaciones de atributos.
El modelo que le pasarias seria algo como esto
```javascript
{
KeyConditionExpression: message.KeyConditionExpression, // Ejemplo: "bussinesid = :bussinesid"
ExpressionAttributeValues: message.ExpressionAttributeValues, // Ejemplo: { ":bussinesid": "VK4bUns21XTC45raf4kDH4DlyRT2" },
ExpressionAttributeNames: message.ExpressionAttributeNames || undefined, // Opcional, si se necesita mapear nombres de atributos
FilterExpression: message.FilterExpression || undefined, // Opcional, para filtrar los resultados
Limit: message.Limit || undefined, // Opcional, para limitar el número de resultados
ScanIndexForward: message.ScanIndexForward !== undefined ? message.ScanIndexForward : true // Orden ascendente o descendente (true por defecto)
}
```