Divide y Vencerás

Nicolás Torres
lemontech-engineering
2 min readMar 6, 2019
  • ¿Cuántas veces no hemos tenido que realizar procesos y esperar a que terminen?
  • ¿Cuántas veces ese tiempo ha sido mayor al esperado y perdemos tiempo valioso?
  • ¿Cuántas veces no hemos perdido el foco de ese proceso y luego de horas recordamos que estaba corriendo 🤦‍♂️?

Pues bien, eso me solía suceder al momento de cargar respaldos de Bases de Datos, y no hablamos de respaldos que pesan un par de MB, sino un par de GB.

Mi interés por optimizar procesos y dividir actividades encendió mi ampolleta 💡

Cuando me dije ‘pero este proceso es muy monótono y repetitivo, debiera contratar a alguien que lo haga por mí’, pensé que en vez de gastar dinero en eso, era mejor darme la chance de hacer un pequeño script en Ruby (era la primera vez que metía las manos en Ruby) y comenzar a soltar las manos por este lenguaje tan millennial aplaudido por unos y odiado por otros.

La secuencia era bastante simple…

  • Entrar a una página
  • Descargar un respaldo (esperar en promedio 20', muchas veces perdía el foco en este proceso 😞)
  • Crear base de datos
  • Cargar respaldo

Lo primero fue averiguar cómo obtener tales respaldos sin entrar a una página web, cosa sencilla al enterarme que los respaldos se almacenan en S3. Lo demás algo trivial con comandos bash 🤟.

Manos a la obra!

#!/usr/bin/env ruby

¿Y ahora qué?, pues bien, me enteré que para utilizar dependencias externas basta con agregar una gema de Ruby (tierno, no?). Así que fue lo primero que quise testear.

gem install aws-sdk

Con esto ya tenía el mundo en mis manos, o al menos los respaldos…

s3 = AWS::S3.new(
:access_key_id => ENV["AMAZON_ACCESS_KEY_ID"],
:secret_access_key => ENV["AMAZON_SECRET_ACCESS_KEY"]
)
bucket = s3.buckets[bucket]

Gracias a esto me traía todos los respaldos de un bucket específico.

Lo demás ya vino solo, crear una especie de archivo de configuración…

$mysqlCmd = "mysql -u root -pPASSWORD"
$root = "dbs/"
$db = "{client}"
$bucket = "bucket"

Descargar un respaldo utilizando utilizando wget , cargar un respaldo utilizando comandos mysql y finalmente…

load_db.rb BD_NAME 🤟

Esto se conectaba a S3, descargaba el respaldo y lo cargaba en BD con tan sólo indicarle qué respaldo quería 🙂.

Adiós tiempos muertos, adiós salidas de foco…

En conclusión…

Mi idea con esto es transparentar como una tarea repetitiva se puede automatizar, y como el título lo dice ‘Divide y Vencerás’, muchas veces nos enfrascamos con tareas cotidianas que parecen eternas y pensamos: “podría estar utilizando mi tiempo en algo más productivo o cosas como malditos tiempos muertos”.

Pues con un poco de ganas, espíritu y pereza (en cierto punto es pereza automatizar esto 😜) podemos hacer cosas geniales.

Ahora me puedo hacer café sin preocuparme de revisar si el respaldo bajó para comenzar a cargarlo ☕️.

PS: en caso que alguien desee aportar :) https://github.com/ntorresj/load_db

--

--