En el siguiente post hablaremos sobre Cloud SQL, un servicio gestionado por GCP que nos permite disponer de una base de datos relacional en la nube. ¿Será seguro?¿Qué bases de datos ofrece? En definitiva, ¿por qué Cloud SQL?

Cloud SQL, de forma muy resumida, es un servicio totalmente gestionado que permite el uso de bases de datos relacionales en la nube de Google. Cloud SQL asegura, de forma automática, que el servicio sea fiable, escalable y seguro. Gracias a que automatiza servicios como, los backups, las réplicas y el cifrado, el servicio alcanza un porcentaje de disponibilidad altísimo, del 95% en cualquier parte del mundo.

Cloud SQL permite escalar el almacenamiento hasta 624 GB de RAM y 30 TB de almacenamiento, según las necesidades del proyecto, entre otras muchas características que veremos a continuación.

¿Por qué SQL en vez de NoSQL?

Como con casi todas las tecnologías, no hay una mejor que la otra, de forma que la elección debe basarse en las necesidades del proyecto.

Tipos de Cloud SQL

Cloud SQL ofrece la posibilidad de utilizar tres bases de datos diferentes. A continuación haremos un breve resumen de los pros de cada una de ellas y luego expondremos las principales características que tienen en GCP puesto que difiere un poco de lo que ofrecen fuera de esta nube.

SQL Server:

MySQL:

PostgreSQL:

SQL Server MySQL PostgreSQL
624 GB de RAM y 96 CPUs 624 GB de RAM y 96 CPUs 624 GB de RAM y 96 CPUs
Autoescala hasta 30 TB Autoescala hasta 30 TB Autoescala hasta 30 TB
Instancias en EU, US y Asia Instancias en EU, US y Asia Instancias en EU, US y Asia
Datos encriptados Datos encriptados Datos encriptados
Conexiones externas seguras con Cloud SQL Proxy o protocolo SSL/TLS Conexiones externas seguras con Cloud SQL Proxy o protocolo SSL/TLS Conexiones externas seguras con Cloud SQL Proxy o protocolo SSL/TLS
Integrado con Stackdriver Integrado con Stackdriver Integrado con Stackdriver
Importar bases de datos usando SQL files Importar y exportar bases de datos usando SQL dump files Importar y exportar usando mysqldump ,o importar y exportar CSV
Backups automáticos o bajo demanda Backups automáticos o bajo demanda Backups automáticos o bajo demanda y recuperación point-in-time
SQL Agent para facilitar réplicas y otros jobs Soporte para protocolo cliente servidor y conectores estándar de PostgreSQL Soporte para protocolo MySQL wire y conectores estándar de MySQL
Replicación de datos en diferentes regiones con cambio ante fallos automático Replicación de datos en diferentes regiones con cambio ante fallos automático
Soporte ante diferentes extensiones de PostgreSQL

GCP indica, además, que características de estas bases de datos no se incluyen en Cloud SQL (SQL server, PostgreSQL, MySQL).

Servicio gestionado

Una de las características principales de este servicio de la nube de Google es que se trata de un servicio gestionado. A continuación, haremos una lista de las ventajas que nos proporciona tener un servicio gestionado, en GCP, centrándonos, en este caso, en Cloud SQL para MySQL.

Seguridad:

Mantenimiento delegado:

Escalado automático:

Backups y recuperación de datos:

Alta disponibilidad:

¿Te ha convencido?, ¿y ahora qué?

Una vez hemos visto lo maravilloso que es, ¿cómo creamos una instancia? Os mostramos un breve ejemplo de cómo conectar una API (usaremos nodejs + sequelize + mysql).

Para conectarnos en el ejemplo abriremos todas las IPs para facilitar su comunicación, pero se pueden realizar conexiones seguras, por IP privada usando VPC o usando el Proxy de Cloud SQL. Esta segunda opción dependerá del entorno que se quiera conectar.

Creación de la instancia:

En el buscador introduciremos Cloud SQL. Pulsando en crear instancia, se abrirá la siguiente pestaña:

En este caso seleccionaremos MySQL y se obtenemos el siguiente formulario:

  1. Nombre de la instancia, único nivel de proyecto. Pero en caso de borrar una instancia, el nombre no quedará libre hasta pasados 6 días.
  2. Contraseña para el root.
  3. Región y zona de la instancia.
  4. Versión (5.7 to 5.6).
  5. Otras configuraciones (Backups, Conexión, Mantenimiento, etc.).

Una vez creada nuestra instancia, esta aparecerá en la página de Cloud SQL tardará unos 3 minutos en crearse).

Lo siguiente que haremos será habilitar la conexión de todas las Ips para facilitar el desarrollo. Para ello, clicamos en el nombre de la instancia y nos aparecerá el siguiente menú, a la izquierda, clicando en la opción destacada. A continuación, como se ve en la siguiente imagen, habilitaremos la IP publica y rellenaremos la parte destacada con 0.0.0.0/0, abriendo la base de datos a todas las IPs.

Después crearemos la base de datos a la que nos vamos a conectar, en el apartado de base de datos ( bastará con darle un nombre).

Por último, faltaría crear un usuario para conectarnos, metiéndonos en el menú de usuarios dentro de la instancia, eligiendo el nombre y la contraseña (los cuales serán importantes para conectar nuestra API de ejemplo).

API de ejemplo

En este caso usaremos Express y Sequelize como ORM (facilita mucho la creación de las tablas).

El código del proyecto será una API muy sencilla que contiene el CRUD de una tabla de usuarios y que estará conectada a nuestra base de datos.

El código está dividido en componentes siguiendo una estrategia de separación por capas entre las que nos encontramos:

A continuación, pondremos las partes del código que son importantes para conectarnos con la Base de datos.

El código está preparado para usar variables de entorno, usando para ello el módulo dotenv, con el fin de facilitar el desarrollo. Para ello, usaremos el código alojado en config-->config, que nos permitirá tener diferentes entornos de trabajo (dev, int, etc.), aunque en este caso bastará con el entorno de desarrollo. Las variables estarán en config-->dev→.env.

Nuestras variables de entorno serán las siguientes:

Puerto en el queremos correr la API, usuario de la base de datos, contraseña del usuario, base de datos dentro de la instancia a la que nos queremos conectar y, por último, la dirección IP de nuestra instancia.

Y para la conexión, el código será el siguiente (alojado en config-->dev-->config.):

El código de la API se encuentra en este repositorio.

Una ayuda en el desarrollo

Como conclusión, vemos que Cloud SQL nos ofrece la posibilidad de tener nuestra base de datos relacional en la nube de una forma muy rápida y sencilla. Como buen servicio gestionado, nos permite centrarnos en el desarrollo de la aplicación más que en el entorno. Cloud SQL, junto con otros servicios de GCP como Cloud Spanner, Big Query y Bigtable, entre otros, nos facilita y ayuda en el desarrollo de soluciones relacionadas con los datos, soluciones que son cada vez más numerosas.

Cuéntanos qué te parece.

Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.

Suscríbete

Estamos comprometidos.

Tecnología, personas e impacto positivo.