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 *