Azure: ¿qué es y por qué tengo que aprender acerca de Cloud Computing?

Demian Sclausero
Flux IT Thoughts
Published in
7 min readDec 17, 2020

--

En una charla con amigos surgió el tema del cambio de paradigma en un cliente para el que estamos desarrollando un gran sistema. Este cliente cambió toda su forma de infraestructura de datacenter propio a Azure. Uno de mis amigos me dijo: “¡¿Azure?! ¡¿Qué es eso?! Lo escuché por ahí, pero no tengo idea de qué es”.

Después de esa conversación me quedé pensando en que hay mucha gente de IT que no conoce qué es Azure o cómo utilizar Cloud Computing, y en que eso va a segmentar mucho los trabajos a los que puedan aplicar en un futuro, porque en los próximos años va a ser imprescindible saber de Cloud Computing para poder desarrollar sistemas o mantenerlos.

Cuando hablamos de Cloud Computing nos referimos a un modelo de negocio a través de internet que es el auge en estos momentos, dado que cambió el paradigma informático que conocíamos hasta hace unos años, y que está basado en servicios cloud. Uno de los más conocidos es el de Microsoft Azure.

Una breve introducción a Azure

Con la explosión de las .com se comenzó a desarrollar mucho más software, y esto fue en aumento los años posteriores. Para que un software pueda funcionar necesita un hardware, y el problema está en que ese hardware tiene un costo.

Antes de Azure, se tenía que hacer un sizing para calcular cuánto hardware era necesario para correr cierto software. El problema era que se calculaba en picos máximos, y se compraba el hardware para suplir esos picos. Pero, ¿qué pasaba si no llegaba a los picos estipulados, o si había momentos en los que no se utilizaba la aplicación? Ese dinero invertido en hardware no se amortizaba. Es más, se desperdiciaba. Y ni hablar de la rapidez con la que los equipos quedaban chicos, y había que volver a invertir para actualizarlos.

Por este motivo en 2008 nace Microsoft Azure, con la idea de poder tener datacenters dinámicos en la nube. Se terminaron los problemas por cortes de energía o de internet en los datacenters. Además, dada la redundancia geográfica, si se cae algún datacenter de Azure, automáticamente levanta su contingencia en otra región. Y lo más importante es que el hardware pasa a ser un servicio. Es decir: puedo colocar y sacar hardware de mis máquinas virtuales a gusto y piaccere dependiendo del uso.

Así surgen 3 conceptos:

Azure como PaaS

Windows Azure nace como PaaS. Es decir, como plataforma como servicio. Se encarga este área de la gestión de servidores y alojamiento, por ejemplo, de sitios web (hasta 10 máquinas compartidas). También es la parte donde se despliega el software.

Azure como IaaS

La infraestructura como servicio (IaaS) permite crear máquinas virtuales con el sistema operativo que se prefiera. Por otro lado, es posible elegir también el número de núcleos de procesamiento, el tamaño de la RAM e importar discos virtuales. Además, con las herramientas PowerShell se puede realizar script complejo.

Azure como SaaS

El software como servicio es la parte más conocida de Azure. Aquí es donde se encuentra, por ejemplo, Office 365 o Microsoft Dynamics 365.

Estos 3 conceptos nos dan el dinamismo de poder crear hardware para utilizar en nuestros desarrollos, y poder escalar o quitar recursos cuando sean necesarios, generando un ahorro de dinero cuando los picos de uso son menores.

Ahora, volvamos al tópico: ¿por qué es necesario conocer Azure para desarrollar software?

Cuando desarrollamos software tenemos 3 patas principales: el código, el compilador y la base de datos. Antes de Azure había que tener todas estas patas en la empresa. Azure brinda PaaS e IaaS disponibilizando esto para cualquier dispositivo y desde cualquier lugar del mundo, lo que implica que puedo tener distribuido mi equipo de trabajo sin grandes esfuerzos de hardware y de comunicaciones. Lo anterior cambió el paradigma de desarrollo y las tendencias.

Una de las novedades es la utilización de DOCKER (el encapsulamiento dentro de un contenedor de todo lo necesario para que la aplicación desarrollada corra autónomamente). Usar Docker normalmente implica muchas cosas. Inicialmente, un repositorio de imágenes de Docker, que es donde guardar todo el contenedor para que pueda ser utilizado. Para esto Azure nos brinda Azure Container registry, un repositorio privado que nos permite guardar imágenes que van a ser desplegadas en la infraestructura. También necesitaremos una infraestructura que entienda Docker y utilice esa imagen para disponibilizar la aplicación que tiene dentro. Y para eso tenemos Azure Kubernetes Service (AKS), que monta imágenes de Docker y las disponibiliza mediante un service o ingress, para que podamos accederlo mediante una IP o un Dns público.

Y, como diría Linus Torvalds, “show me the code”. Esta es una implementación de Kubernetes (K8s):

Para poder crear esta magia se debe crear un archivo YAML, que le dice al K8s qué crear, y se divide en 2 partes:

1.- Un deployment, que es donde está el código del Docker al que hace referencia, y en qué repositorio está guardado, bajo qué condiciones se levantará el Docker y sobre qué puerto está escuchando peticiones.

2.- Un Servicio, que es el encargado de decirle al mundo cómo se va a acceder al POD. Un Pod (es como en una vaina de guisantes) es un grupo de uno o más contenedores (como contenedores Docker), con almacenamiento/red compartidos, y unas especificaciones de cómo ejecutar los contenedores.

Veamos el código de un YAML:

Deployment

Service

Pero esto no estaría completo sin un respaldo de datos. Azure nos permite crear distintos tipos de soporte de almacenamiento de muchos lenguajes, como Sql Server, MongoDB, MySql u Oracle, sin tener que estar comprando servidores para cada uno de ellos (gran ventaja en costos y en performance).

Ya teniendo una idea de la parte de desarrollo, la pregunta que surge es:

¿Y cómo implemento mi aplicación en Docker a Azure?

La respuesta a eso es Azure DevOps.

Azure DevOps es la plataforma de Microsoft que nos permite realizar todo el manejo dentro de un flujo de DevOps desde el ALM (Application Lifecycle Management), la integración continua, la gestión de paquetes con Azure Artifacts hasta el despliegue a distintos ambientes, la gestión de los repositorios con Azure Repos, y la creación de test plan. Está dividido por proyectos, la gestión de usuarios es completa (por roles), y de acuerdo a qué grupos este tenga diferentes privilegios. Es compatible con GITHUB y muchos otros repositories.

Pantalla principal de Azure DevOps.

¿Qué podemos hacer con Azure DevOps?

Podemos automatizar nuestros despliegues. Y, mediante el dashboard, podemos ver como va el proyecto, sus sprints y demás.

Dada la complejidad de proyectos que involucra una solución, es imprescindible tener un administrador de despliegue para poder tener control de todo lo que se realiza y se despliega. Y si todo esto parece muy bueno, lo mejor es que es gratis: podemos usar Azure DevOps para administrar nuestros proyectos (claro, que con algunas limitaciones). Azure tiene el concepto de pago por uso, por lo que nos deja utilizar gratis Azure DevOps hasta 5 usuarios.

Y cómo hacemos esto tan lindo …

Creamos un pipeline que se encargará de compilar las imágenes de Docker en función del archivo DockerFile (este archivo es el que se utiliza para crear las imágenes de Docker). y luego ejecutar los UnitTest para comprobar que los cambios no hayan generado otros bugs en el código existente.

Esto generará un ARTIFACT de deploy, que leeremos desde el módulo de release para luego implementar en K8s.

Una vez concluido este proceso, tendremos nuestra aplicación implementada en K8S con sus respectivos services.

En concreto la implementación de una solución Cloud Computing quedaría de esta forma:

Resumiendo: es importante que aprendamos a utilizar Cloud Computing dado que las empresas que atraviesan una transformación digital están cada vez más abocadas a la utilización de servicios cloud como Azure. Y más que nada, si estamos en la rama del desarrollo, entender qué es Kubernetes, Docker, NoSQL databases, aprender a monitorizar con insights, saber cómo resguardar información con Azure Key Vault, y también cómo usar Azure DevOps. Como desarrolladores, conocer estas tecnologías nos va a dar herramientas a la hora de poder conseguir un buen puesto; y como owners de proyectos, nos va a permitir el manejo de costos más finos y detallados.

Conocé más sobre Flux IT : Website · Instagram · LinkedIn · Twitter · Dribbble · Breezy

--

--