En una entrada anterior ya comentamos qué era AWS y vimos cómo crear una instancia EC2.
Otro de los servicios que ofrece, es el Servicio de Base de Datos Relacional (RDS por sus siglas en inglés) que resulta muy sencillo de configurar y escalar, permitiéndonos tener una base de datos relacional en la nube, pudiendo elegir entre varios tipos de motores de bases de datos (Amazon Aurora, MySQL, MariaDB, Oracle Database, SQL Server y PostgreSQL).
En esta entrada vamos a ver cómo podemos lanzar una instandia RDS de MySQL la cual nos puede servir para realizar nuestros proyectos.
Lo primero que debemos hacer cuando entramos en la Consola de Administración de AWS es buscar el servicio de RDS.
Una vez seleccionamos el servicio RDS podemos ver una pantalla con todas las instancias de base de datos que disponemos. Desde ahí podemos crear una nueva base de datos pinchando sobre el botón «Create database«.
A continuación veremos que tenemos disponibles una serie de motores de base de datos. Nosotros vamos a coger la opción de MySQL.
Vemos que podemos elegir la versión de MySQL y tenemos la opción de usar el método de creación estándar (dónde podemos configurar todas las opciones) o el método fácil (dónde podemos crear la instancia de manera más sencilla y después tener la opción de modificar el resto de opciones). Vamos a elegir la opción estándar y así ver todas las opciones.
Si seguimos bajando en las opciones, vemos que nos pide un template (nosotros vamos a coger la opción Free tier para este ejemplo, pero si estamos en un entorno de producción o desarrollo deberemos escoger otro template).
Vemos además que ya empezamos con la configuración de la base de datos. Debemos introducir el nombre de la instancia, el usuario administrador y la contraseña para dicho usuario.
Lo siguiente que debemos seleccionar el el tipo de instancia. Hay muchos tipos de instancias con distintas configuraciones. Para el template Free tier solo nos permite seleccionar una instancia db.t2.micro, una máquina con 1 vCPU Y 1GiB de RAM.
A continuación podemos configurar el almacenamiento. Por defecto tenemos seleccionado un Storage de tipo General Purpose (SSD), 20GiB, auto escalado activado y un almacenamiento máximo (en caso de tener activado el autoescalado) de 1000GiB.
Dentro del tipo de Storage tenemos General Purpose (SSD) y Provisioned IOPS (SSD). Ambas opciones usan dispositivos de almacenamiento tipo SSD, pero la diferencia entre General Purpose y Provisioned IOPS es que en la segunda puedes configurar en número de operaciones de entrada/salida. Esta segunda opción se suele usar cuando tienes aplicaciones que requieren mucha carga en la base de datos.
Lo siguiente que nos encontramos es la configuración de disponibilidad (deshabilitada para Free tier) la cual nos permite configurar las opciones de disponibilidad de nuestra base de datos. Esto nos permitiría crear réplicas de nuestra base de datos en otras zonas de manera que pudiéramos tener redundancia de datos, rebajar la carga al poder dividir las peticiones entre diferentes instancias, etc.
Siguiendo con la configuración, nos encontramos con una parte importante: la conectividad.
Aquí podemos indicar en qué red privada VPC (Virtual Private Cloud) crear nuestra instancia. Amazon nos crea por defecto una red virtual, pero podemos crear nuevas VPCs según nuestras necesidades.
Si desplegamos la parte de configuración adicional, veremos que podemos elegir más opciones como la subred, si damos acceso público a la base de datos, el grupo de seguridad, la zona de disponibilidad y el puerto de conexión a la base de datos.
Por seguridad, una base de datos no debe estar accesible de forma pública, ya que podríamos recibir ataques. Esta sólo debe ser accesible desde nuestra aplicación. Sin embargo, si estamos desarrollando, no vamos a estar en la misma subred de la RDS. ¿Cómo podemos conseguir conectividad entonces con la instancia si no está accesible de forma pública? Podemos utilizar un tunel ssh para poder conectarnos a una instancia EC2 que hayamos levantado previamente, la cual solo tenga acceso por SSH, y que tenga conectividad con la instancia RDS. Aquí es donde entrarían los grupos de seguridad y la configuración de las distintas VPCs (si tuvieramos más de una).
En mi caso, previamente tenía creado un grupo de seguridad DMZ donde he permitido conectividad por ssh y he creado una instancia EC2 asociándola a este grupo de seguridad (en otra entrada veremos cómo se puede hacer esto) y por otro lado, otro grupo de seguridad al que he llamado RDS (el que he seleccionado en la pantalla) y que únicamente permite acceso al tráfico proviniente de la DMZ por el puerto 3306.
El siguiente paso es elegir el tipo de autenticación con la base de datos. Podemos elegir la autenticación usando la propia base de datos, autenticación mediante IAM o autenticación mediante Kerberos.
Finalmente tenemos la configuración adicional: nombre de la base de datos, backups, monitorización, etc.
Lo primero es indicar un nombre para la base de datos (no es lo mismo que el nombre de la instancia que habíamos elegido antes). Después el DB parameter group, que actua como un contenedor para los valores de la configuración que pueden aplicar a una o más instancias. También tenemos la configuración automática de backups. Podemos configurar cada cuanto tiempo e incluso en qué ventana de tiempo queremos que se realicen copias de seguridad de nuestra base de datos.
Por último, tenemos opciones de monitorización, logs, mantenimiento (actualización de la versión de la base de datos) y protección contra eliminación accidental de la base de datos.
Una vez finalizamos el proceso, podemos ver en nuestro listado de instancias que se está creando la nueva base de datos.
Una vez creada, para poder acceder a ella con la configuración que hemos elegido, debemos crearnos un tunel ssh.
Veamos en primer lugar la URL de la instancia que se ha creado. Para ello, una vez ha finalizado el proceso de creación, seleccionamos la instancia y podemos ver la configuración de esta.
Aquí podemos ver el endpoint que debemos usar para conectarnos a ella. Ahora creamos un tunel ssh de la siguiente forma:
$ ssh -i key.pem -NL 9000:dbendpoint:3306 ec2-user@ec2endpoint -v
Debemos sustituir dbendpoint por el endpoint de la base de datos, ec2endpoint por el endpoint de la instancia EC2 que hayamos creado en la DMZ y el key.pem es el fichero de clave privada que hemos descargado al crear la instancia EC2. 9000 es el puerto que elijamos para hacer el tunel, al cual nos tendremos que conectar desde nuestra máquina después en lugar de al puerto 3306.
Una vez levantado el tunel, para conectarnos a la base de datos no tenemos más que configurar nuestra conexión a localhost (127.0.0.1) puerto 9000.
La imagen anterior muestra la configuración que hay que poner desde MySQL Workbench. Y una vez conectados, ya podemos ver nuestra base de datos donde podremos empezar a crear nuestras tablas.