Uso de AWS RDS con Node.js y Express.js

    Introducci贸n

    No es una exageraci贸n decir que la informaci贸n y los datos gobiernan el mundo. Casi todas las aplicaciones, desde las redes sociales y los sitios web de comercio electr贸nico hasta las aplicaciones simples de seguimiento del tiempo y de dibujo, se basan en la tarea b谩sica y fundamental de almacenar y recuperar datos para funcionar como se espera.

    De Amazon Servicio de base de datos relacional (RDS) proporciona una manera f谩cil de configurar una base de datos en la nube utilizando cualquiera de una amplia gama de tecnolog铆as de bases de datos relacionales. En este art铆culo, configuraremos una base de datos en RDS y almacenaremos datos en ella con una aplicaci贸n Node.

    Prerrequisitos

    Servicios web de Amazon

    Servicios web de Amazon (AWS) proporciona una colecci贸n de herramientas para crear aplicaciones en la nube. Como RDS es un servicio de AWS, tendremos que configurar una cuenta de AWS.

    AWS tiene un nivel gratuito para muchas cosas incre铆bles, y RDS no es una excepci贸n: puede usar 750 horas (31 d铆as) al mes de db.t2.micro uso de la base de datos de forma gratuita durante 12 meses.

    Cartero

    Postman es una herramienta 煤til para crear y enviar solicitudes. Usaremos esto en la mitad Node del art铆culo para probar el c贸digo que hemos escrito.

    Postman es opcional y, realmente, puede usar cualquier herramienta para probar el punto final, incluso su navegador de Internet.

    Configurar una instancia de RDS

    Primero, crearemos nuestro cl煤ster de instancias RDS. Dir铆gete a AWS y iniciar sesi贸n.

    Una vez que haya iniciado sesi贸n, haga clic en ‘Servicios’ en la parte superior izquierda y luego busque ‘RDS’. Se le presentar谩 una p谩gina que se parece a esto:

    En el men煤 de la izquierda, seleccione ‘Bases de datos’. Esto normalmente mostrar铆a una lista de cl煤steres de instancias RDS que hemos creado, pero a煤n no tenemos ninguno.

    Para crear una, haga clic en el bot贸n naranja ‘Crear base de datos’. Deber铆a aparecer una p谩gina que se parece a:

    AWS ha introducido recientemente un m茅todo de ‘creaci贸n f谩cil’ para crear nuevas instancias de RDS, as铆 que us茅moslo.

    En ‘Tipo de motor’ usaremos ‘Amazon Aurora’, que es el motor de base de datos de Amazon optimizado para RDS. Para la edici贸n, dejaremos este conjunto en ‘Amazon Aurora con compatibilidad con MySQL 5.6’.

    En ‘Tama帽o de instancia de base de datos’, seleccione la opci贸n ‘Desarrollo / Prueba’; este es un tipo de instancia menos potente (y m谩s econ贸mico), pero a煤n as铆 es m谩s que suficiente para lo que lo necesitamos.

    El ‘identificador de cl煤ster de base de datos’ es el nombre del cl煤ster de base de datos que estamos creando. Llamemos nuestro my-node-database por ahora.

    Para el nombre de usuario maestro, d茅jelo como admin. Finalmente, tenemos la opci贸n de tener una contrase帽a maestra generada autom谩ticamente. Para facilitar este tutorial, establezcamos el nuestro.

    隆Aseg煤rese de que sea seguro, ya que este es el nombre de usuario y la contrase帽a maestros!

    Finalmente, despl谩cese hacia abajo y haga clic en ‘Crear base de datos’. Se necesitan unos minutos para aprovisionar completamente una instancia de RDS:

    Antes de comenzar con nuestra aplicaci贸n Node, debemos asegurarnos de poder conectarnos a la instancia. Seleccione la instancia que acaba de crear (ser谩 la opci贸n que termine en instance-1) y tome nota del valor en ‘Punto final’.

    En el lado derecho, en ‘Grupos de seguridad de VPC’, haga clic en el enlace; esto lo llevar谩 al grupo de seguridad que se configur贸 para la base de datos. Los grupos de seguridad son esencialmente reglas de firewall sobre qui茅n puede y qui茅n no puede hacer conexiones a un recurso.

    Actualmente, este est谩 configurado para permitir solo conexiones de recursos que tienen el mismo grupo de seguridad.

    Al seleccionar el men煤 desplegable ‘Acciones’ en la parte superior, navegue hasta ‘Editar reglas de entrada’. En este cuadro de di谩logo, haga clic en “Agregar regla”. Para la nueva regla, en ‘Tipo’, seleccione ‘Todo el tr谩fico’. En “Fuente”, seleccione “En cualquier lugar”.

    Deber铆as terminar con algo parecido a esto:

    Regrese a RDS y ‘Modifique’ la instancia. Aqu铆, en la secci贸n ‘Redes y seguridad’, en ‘Accesibilidad p煤blica’, queremos seleccionar ‘S铆’; esto nos permite conectarnos a la base de datos desde nuestras m谩quinas; de lo contrario, tendr铆amos que poner nuestra aplicaci贸n en una instancia EC2, que no es el tema central de este art铆culo.

    隆Su instancia de RDS ahora deber铆a estar lista para funcionar! Escribamos un c贸digo para interactuar con 茅l.

    Aplicaci贸n de node

    Para interactuar con nuestra aplicaci贸n, crearemos una API muy simple que nos permitir谩 almacenar perfiles de usuario a trav茅s de Express.js. Antes de hacer eso, necesitamos crear una tabla dentro de nuestra instancia de RDS para almacenar datos.

    Vamos a crear una carpeta, movernos a ella e inicializar una aplicaci贸n Node.js en blanco con la configuraci贸n predeterminada:

    $ mkdir node-rds
    $ cd node-rds
    $ npm init -y
    

    Luego, instalemos las dependencias requeridas:

    $ npm install express --save
    $ npm install mysql --save
    

    Y finalmente, queremos crear dos archivos JavaScript: uno de ellos ser谩 nuestra aplicaci贸n Express, el otro ser谩 un script de un solo uso para crear una tabla en nuestra base de datos:

    $ touch index.js
    $ touch dbseed.js
    

    Script de creaci贸n de tablas

    Empecemos con el dbseed.js archivo:

    const mysql = require('mysql');
    
    const con = mysql.createConnection({
        host: "<DB_ENDPOINT>",
        user: "admin",
        password: "<DB_PASSWORD>"
    });
    
    con.connect(function(err) {
        if (err) throw err;
        console.log("Connected!");
        con.end();
    });
    

    Aseg煤rate de cambiar <DB_ENDPOINT> para el punto final que anotamos anteriormente y complete la contrase帽a. Lo que har谩 este fragmento de c贸digo es intentar conectarse a la base de datos; si tiene 茅xito, ejecutar谩 una funci贸n an贸nima que registrar谩 ‘隆Conectado!’ Y luego cerrar谩 inmediatamente la conexi贸n.

    Podemos verificar r谩pidamente para ver si est谩 configurado correctamente ejecutando:

    $ node dbseed.js
    

    La aplicaci贸n deber铆a devolver ‘隆Conectado!’. Si no es as铆, es probable que haya un problema con la configuraci贸n de seguridad; vuelva a la configuraci贸n de RDS y aseg煤rese de haber hecho todo correctamente.

    Ahora que sabemos que definitivamente podemos conectarnos a nuestra base de datos, necesitamos crear una tabla. Modifiquemos nuestra funci贸n an贸nima:

    con.connect(function(err) {
        if (err) throw err;
    
        con.query('CREATE DATABASE IF NOT EXISTS main;');
        con.query('USE main;');
        con.query('CREATE TABLE IF NOT EXISTS users(id int NOT NULL AUTO_INCREMENT, username varchar(30), email varchar(255), age int, PRIMARY KEY(id));', function(error, result, fields) {
            console.log(result);
        });
        con.end();
    });
    

    La salida esperada deber铆a verse as铆:

    OkPacket {
      fieldCount: 0,
      affectedRows: 0,
      insertId: 0,
      serverStatus: 2,
      warningCount: 0,
      message: '',
      protocol41: true,
      changedRows: 0
    }
    

    Ahora que tenemos una tabla con la que trabajar, configuremos la aplicaci贸n Express para insertar y recuperar datos de nuestra base de datos.

    Insertar punto final de usuario

    Escribamos un POST solicitud de creaci贸n de usuario en nuestro index.js archivo:

    app.post('/users', (req, res) => {
        if (req.query.username && req.query.email && req.query.age) {
            console.log('Request received');
            con.connect(function(err) {
                con.query(`INSERT INTO main.users (username, email, age) VALUES ('${req.query.username}', '${req.query.email}', '${req.query.age}')`, function(err, result, fields) {
                    if (err) res.send(err);
                    if (result) res.send({username: req.query.username, email: req.query.email, age: req.query.age});
                    if (fields) console.log(fields);
                });
            });
        } else {
            console.log('Missing a parameter');
        }
    });
    

    Lo que hace este c贸digo es bastante sencillo: contiene la informaci贸n del POST request y lo inserta en una consulta. Esta consulta crear谩 un usuario en la base de datos RDS y registrar谩 los resultados.

    Comprobemos si funciona:

    $ node index.js
    

    En Postman queremos crear un POST solicitud a nuestro servidor. Ingresemos los par谩metros requeridos y enviemos la solicitud:

    Deber铆amos recuperar los mismos datos, lo que significa que est谩 funcionando correctamente y nuestro punto final ha insertado un usuario.

    Obtener el punto final de los usuarios

    Ideemos un sencillo GET endpoint para una forma m谩s sencilla de comprobar los resultados. Bajo el POST manejador de solicitudes, hagamos otro manejador:

    app.get('/users', (req, res) => {
        con.connect(function(err) {
            con.query(`SELECT * FROM main.users`, function(err, result, fields) {
                if (err) res.send(err);
                if (result) res.send(result);
            });
        });
    });
    

    En su navegador, navegue hasta localhost:3000/users y deber铆a aparecer con todos los usuarios insertados.

    驴Qu茅 sigue?

    Asegure su base de datos

    Anteriormente, hicimos que nuestra instancia de RDS fuera de acceso p煤blico y con un grupo de seguridad completamente abierto. Puede configurar EC2 y comenzar a reforzar la seguridad en su instancia eliminando el acceso p煤blico y bloqueando su grupo de seguridad.

    Tambi茅n debe echar un vistazo a la base de c贸digo: es funcional, pero puede ser vulnerable a ataques como la inyecci贸n de SQL; vale la pena dedicar tiempo a asegurarse de que los usuarios no puedan realizar acciones en su base de datos que usted no pretenda.

    Experimente con lectura / escritura

    Si profundiza un poco m谩s en RDS, puede configurar instancias espec铆ficamente para leer o escribir desde; esto puede ayudar a proteger su instancia, pero tambi茅n si est谩 tratando con muchas operaciones de bases de datos, esto puede ayudar a optimizar el rendimiento de sus bases de datos.

    Pruebe diferentes configuraciones

    Usamos AWS ‘Easy create’ para crear nuestra base de datos; vale la pena volver atr谩s y probar las diversas configuraciones con las que podr铆a configurar RDS para satisfacer sus necesidades particulares.

    隆Termine su instancia RDS!

    Si no planea continuar usando su instancia de RDS, 隆aseg煤rese de terminarla! De lo contrario, acumular谩 una factura considerable en un mes.

    Conclusi贸n

    Ha creado una instancia de RDS y la ha llenado con datos a trav茅s de un punto final Node / Express. Este es un gran trampol铆n para saltar a aplicaciones web m谩s complejas que almacenan y brindan datos a sus usuarios, y con los datos aumentando de manera mete贸rica como un bien valioso, este es un buen momento para pensar en qu茅 tipo de datos desea operar.

    Para terminar, recuerde que cualquier dato que almacene es su deber de proteger, 隆aseg煤rese siempre de comprender c贸mo crear una aplicaci贸n segura antes de comenzar a ingresar los datos personales de las personas en ella!

     

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *