Desarrollo web

Última actualización: 2025-03-12

Usando Amazon RDS

Amazon Relational Database Service (RDS) es un servicio de base de datos relacional administrado que permite a los usuarios aprovisionar, operar y escalar bases de datos relacionales en la nube de AWS. Proporciona una infraestructura de base de datos gestionada, lo que significa que AWS se encarga de las tareas administrativas, como el aprovisionamiento de hardware, la instalación de software, la aplicación de parches y las copias de seguridad. Los usuarios pueden elegir entre varios motores de bases de datos, incluidos MySQL, PostgreSQL, Oracle, SQL Server y MariaDB.

Contenido

  1. Crear una instancia de base de datos MySQL: Desde el Learner Lab ir a la consola de AWS y seleccionar Aurora and RDS. Presionar el botón de Crear base de datos y completar el formulario con la siguiente información (las opciones no mencionadas aquí se deben dejar con su valor por omisión):

    • Tipo de motor: MySQL

    • Plantillas: Capa gratuita

    • Identificador de instancias de bases de datos: Nombre de la instancia de base de datos. Ejemplo: bd-desarrollo-web

    • Contraseña maestra: Contraseña para administrar la instancia de base de datos.

    • Confirmar la contraseña maestra: Repetir la contraseña del punto anterior.

    • Acceso público:

    • Grupo de seguridad de VPC (firewall): Crear nuevo

    • Nuevo nombre del grupo de seguridad de VPC: Nombre del grupo de seguridad para la instancia de base de datos. Ejemplo:
      gpo-seguridad-bd-desarrollo-web

    Finalmente, presionar el botón Crear base de datos.

    Después de varios minutos la instancia de base de datos quedará creada y en estado Disponible. Una vez que esto ocurra, darle clic a la liga correspondiente en la columna de Identificador de base de datos. En la página desplegada buscar y tomar nota del Punto de enlace (por ejemplo, bd-desarrollo-web.wklyv437lkc1.us-east-1.rds.amazonaws.com). Este dato será importante para conectar los clientes al servidor de base de datos.

  2. Configurar el firewall virtual de la insancia de base de datos: Requerimos abrir el puerto 3306 para poder conectar nuestros clientes a la instancia de base de datos desde cualquier punto de Internet. Ir a la consola de AWS y seleccionar EC2 y realizar las siguientes acciones:

    1. En el menú del lado izquierdo, en la sección de Red y seguridad, seleccionar Grupos de seguridad.
    2. En la lista desplegada, buscar el grupo de seguridad creado anteriormente (por ejemplo, gpo-seguridad-bd-desarrollo-web) y darle clic a la liga correspondiente en la columna de ID de grupo de seguridad.
    3. Presionar el botón Editar reglas de entrada.
    4. En el renglón existente, editar las columnas siguientes:
      • Tipo: MYSQL/Aurora
      • Origen: Anywhere-IPv4
      • Descripción: el propósito de este puerto (por ejemplo: Servidor MySQL)
    5. Presionar el botón Guardar reglas.

El monitor de MySQL es una herramienta que se ejecuta desde la terminal y permite interactuar directamente con las bases de datos a través de instrucciones de SQL.

  1. Descargar el script SQL de prueba. Desde la terminal de Cloud9 dentro del directorio donde se desee decargar el script SQL, teclear:

    wget https://arielortiz.info/s202511/tc2005b/quotations.sql
  2. Correr el monitor de MySQL. Teclear en la terminal lo siguiente:

    mysql -u admin -p -h host
    

    En donde host se debe remplazar por el punto de enlace de la instancia de base de datos RDS (algo así como bd-desarrollo-web.us-east-1.rds.amazonaws.com). La aplicación solicitará inicialmente la contraseña maestra.

  3. A partir de este momento es posible ejecutar cualquier comando de SQL en el prompt de MySQL. Por ejemplo, para ver todas las bases de datos existentes, teclear:

    SHOW DATABASES;
    
  4. Para correr el script descargado anteriormente, teclear:

    SOURCE quotations.sql
    
  5. Para realizar una consulta, solo se requiere teclearla directamente, por ejemplo:

    SELECT DISTINCT author FROM quotations ORDER BY author;
    
  6. Presionar Ctrl-D para salir del monitor de MySQL.

Guardar la contraseña maestra en una variable de entorno del sistema operativo es crucial porque evita que las credenciales queden expuestas directamente en el código fuente, evitando que sean comprometidas en caso de publicarse en un repositorio de control de versiones como GitHub.

  1. Instalar el comando c9 para poder abrir en el editor cualquier archivo directamente desde la terminal. En la terminal, teclear:

    sudo npm install --global c9
  2. Abrir en el editor el archivo .bashrc contenido en el directorio raíz del usuario del entorno de Cloud9 para definir como variables de entorno el nombre de usuario y constraseña de MySQL. Teclear en la terminal:

    c9 ~/.bashrc
  3. Ir al final del archivo .bashrc y agregar las siguientes dos líneas:

    export MYSQL_HOST="some_host"
    export MYSQL_USER="admin"
    export MYSQL_PASSWORD="some_password"
    

    NOTA: Sustituir some_host por el punto de enlace y some_password por la contraseña maestra de la instancia de base de datos RDS.

    Guardar el archivo.

  4. Cerrar la terminal y abrir una nueva para que tomen efecto los valores de las nuevas variables de entorno. Para verificar que así sea, teclar en la terminal:

    echo $MYSQL_HOST
    echo $MYSQL_USER
    echo $MYSQL_PASSWORD

    Dichos comandos deben desplegar los valores asociados a las respectivas variables de entorno.

    En un programa de JavaScript corriendo en Node se pueden acceder a los valores de estas variables de entorno de la siguiente manera:

    • process.env.MYSQL_HOST
    • process.env.MYSQL_USER
    • process.env.MYSQL_PASSWORD

A continuación se muestra cómo acceder a la instancia de base de datos MySQL recién creada desde un programa de JavaScript ejecutado en Node.

  1. Crear un directorio para la aplicación de prueba. En la terminal teclear:

    mkdir mysql_example

    Para cambiarse al nuevo directorio, teclear:

    cd mysql_example
  2. Instalar el paquete de mysql2 que permite interactuar desde Node con un manejador de base de datos de MySQL usando promesas. En la terminal teclear:

    npm install mysql2
  3. En el editor crear un archivo llamado mysql_select.mjs contenido en el directorio mysql_example y copiar ahí el siguiente código:

    // File: mysql_select.mjs
    
    // Import module to handle MySQL database operations with promises
    import mysql from 'mysql2/promise';
    
    // An async function to perform a SELECT operation on the
    // database
    async function main() {
    
        let connection;
    
        try {
            // Create a connection to the database
            connection = await mysql.createConnection({
                host: process.env.MYSQL_HOST,
                user: process.env.MYSQL_USER,
                password: process.env.MYSQL_PASSWORD,
                database: 'web_database'
            });
            console.log('Conected to the database');
    
            // The SQL query to execute
            const sqlQuery = 'SELECT DISTINCT author '
                + 'FROM quotations ORDER BY author';
    
            // Execute the query
            const [rows] = await connection.execute(sqlQuery);
            console.log('Query execution succeded');
    
            // Loop through the result and log each author
            for (const row of rows) {
                console.log(row.author);
            }
    
        } catch (err) {
            // If an error occurs, re-throw the error
            throw err;
    
        } finally {
            // Close the database connection
            if (connection) {
                await connection.end();
            }
        }
    }
    
    main();
    
  4. Correr el programa anterior. Teclear en la terminal:

    node mysql_select.mjs

    La salida esperada es la siguiente:

    Conected to the database
    Query execution succeded
    Alan Kay
    Alan Turing
    Anonymous
    Aristotle
    Brian Kernigan
    Charles Babbage
    Chinese Proverb
    Donald Knuth
    Douglas Adams
    Edsger Dijkstra
    Fred Brooks
    George Boole
    Grace Hopper
    Harold Abelson
    Homer Simpson
    Howard Aiken
    Isaac Asimov
    Jan van de Snepscheut
    Kent Beck
    Linus Torvalds
    Radia Pearlman
    Thomas Watson
    

La detención de una instancia de base de datos RDS se realiza para pausar temporalmente la base de datos y sus recursos asociados, con el fin de reducir costos durante períodos de inactividad, realizar mantenimiento o pruebas, o conservar la instancia para su uso futuro sin incurrir en cargos continuos por su funcionamiento.

  1. Ir a la consola de Aurora and RDS. En el menú de la parte izquierda, seleccionar Bases de datos y hacer clic en el nombre de la instancia que se desea detener.

  2. En la parte superior derecha, hacer clic en el botón Acciones y seleccionar la opción Detener temporalmente.
  3. En la nueva ventana de diálogo, seleccionar la casilla de verificación de Reconocimiento y hacer clic en el botón Detener temporalmente.

NOTA 1: Se puede detener una instancia hasta por 7 días. Después de este periodo, se reiniciará automáticamente. Aunque la instancia esté detenida, se seguirán descontando créditos por el almacenamiento asociado.

NOTA 2: Para reanudar la operación de la instancia de base de datos detenida, en la consola de Aurora and RDS seleccionar la instancia detenida y hacer clic en Acciones y eligir Comenzar.

La eliminación de una instancia de RDS se realiza con el fin de borrar la base de datos y sus recursos asociados cuando ya no son necesarios, ya sea para reducir costos, reemplazar la instancia con una configuración diferente o eliminar completamente el servicio.

  1. Ir a la consola de Aurora and RDS. En el menú de la parte izquierda, seleccionar Bases de datos y hacer clic en el nombre de la instancia que se desea detener.

  2. En la parte superior derecha, hacer clic en el botón Acciones y seleccionar la opción Eliminar.
  3. En la nueva ventana de diálogo, dejar seleccionada la casillas de verificación de Crear una instantánea final y deseleccionar la opción Conservar copias de seguridad automatizadas. En el campo Nombre de la instantánea final se puede dejar el nombre sugerido. En el último campo de confirmación se debe escribir eliminarme. Finalmente, hacer clic en el botón Eliminar.

Es posible restaurar la instancia de la base de datos a partir de la instantánea (snapshot) creada en la sección anterior (Eliminando una instancia de RDS). Para ello, seguir los siguientes pasos:

  1. Ir a la consola de Aurora and RDS. En el menú de la parte izquierda, seleccionar Instantáneas de y hacer clic en el nombre de la instantánea que se desea restaurar.

  2. En la parte superior derecha, hacer clic en el botón Acciones, seleccionar la opción Restaurar instantánea y completar el formulario con la siguiente información (las opciones no mencionadas aquí se deben dejar con su valor por omisión):

    • Opciones de implementación: Implementación de una instancia de base de datos de zona de disponibilidad única (1 instancia)

    • Identificador de instancias de bases de datos: Nombre de la instancia de base de datos. Conviene utilizar el nombre que originalmente se utilizó.
      Ejemplo: bd-desarrollo-web

    • Clase de instancia de base de datos: Clases ampliables (incluye clases t)
      De la lista, seleccionar: db.t4g.micro

    • Acceso público:

    • Grupos de seguridad de VPC existentes: seleccionar el grupo de seguridad previamente creado para la instancia de base datos (por ejemplo,
      gpo-seguridad-bd-desarrollo-web)

    Finalmente, presionar el botón Restaurar instancia de base de datos.