Mucho tiempo fui reacio a la idea de programar algo que no pueda controlar o pasen muchas cosas por detrás y no entenderlas, odiaba depender de algún servicio externo o un proveedor para mis cosas. Los humanos somos así, el miedo/temor a lo desconocido nos afecta de distintas formas.
A medida que pasa el tiempo, los proyectos y los problemas que conllevan, me di cuenta que mi odio/temor/miedo a la nube era sin fundamentos, mas bien un capricho.
Ya les voy a contar el porque.
¿Cómo llevaba a producción mi código en la antiguedad?
Según se cuenta, antiguamente, para poner mi proyecto en producción tenia que tener las siguientes cosas:
Una computadora/servidor libre
Instalar las dependencias necesarias
Exponer esta computadora/servidor
Abrir sus puertos
Configurar las reglas de seguridad
Hacer los backups a mano o programar algo allí dentro para que los haga y rezar para que este funcionando
Estar al tanto de si es necesario mas hardware para escalar mi producto
Alguien monitoreando 24/7
Y muchas otras cosas mas
Mucho no? Todas estas tareas nos llevaban a tener que contratar alguien o saber de todo y hacerlo nosotros mismos, lo que lleva a tener que usar mucho de nuestro tiempo para esto.
Hasta que llego la nube
Si, la palabra nube es bastante extenso, en informática se lo llama a los servicios que no sabemos (o no nos interesa donde esten) siempre y cuando nos provea de un funcionamiento correcto.
Los más conocidos son: GCP, AWS y Azure (aunque hay muchos otros)
Dentro de estas “nubes” existen muchos servicios para cada cosa que necesitemos hacer. Voy a usar de ejemplo a AWS.
Necesito un servicio que me de un dns y ademas me lo lleve a otro servicio: Route 53
Tengo una web estática y quiero hostearla en algun lugar para que la gente pueda acceder: Amazon S3
Tengo un backend en Node.JS con Docker y me gustaria llevarlo a producción: Una combinación de ECS y ECR
Y así tenemos servicios para todo (mas o menos 250).
Seguramente me van a preguntar, ¿Cuesta mucho configurar todo esto? Si/No, depende del servicio, muchas veces con dos o tres comandos podemos hacer un montón de cosas y tener un sitio web levantado, por ejemplo.
Todo el tema de seguridad y configuración (del lado del servidor) esta manejado por estos servicios y nos olvidamos de muchísimos dolores de cabeza a la hora de realizar estos pasos. Otro punto interesante, es que muchos servicios tienen escalado automático (o manual, pero fácil) que nos permite, en caso de tener mucha masividad de usuarios en ciertas horas o todo el tiempo, con un clic aumentar la potencia de nuestro servicio.
No todo es color de rosas
Ya le tire muchas flores a esto, pero ¿Qué es lo malo?.
Bueno, veo principalmente dos cosas:
No es gratis, o por lo menos la gran mayoría no (aunque muchos tienen una capa gratuita generosa), el precio muchas veces es por uso, es decir, hiciste alguna mal configuración ó se consume mucho, el valor subirá (astronómicamente)
Una cosa que no se soluciona es el tema de que requiere una persona para la configuración, quizás si no tenemos conocimientos al principio luce fácil, pero cuando tenemos mucha masividad de usuarios ahí se requerirá a alguien con experiencia (normalmente un DevOps)
Conclusiones
La nube, a dia de hoy, creo que es una buena opción a evaluar a la hora de llevar nuestros productos/servicios a producción, e incluso podemos integrarlos con algun sistema de CI y todo será una maravilla (o no)
Recomendación de la semana
Música para programar! Muchas veces me pasa que no sé que escuchar mientras codeo, pero uso esto!