Dentro de los servicios de Cloud, podemos encontrar IaaS y PaaS; cada una tiene sus pros y contras, sin embargo la mayoría de ingenieros que vienen de cacharrear y trastear por su cuenta (como es mi caso) estamos mas familiarizados con la administración propia de los recursos, nos acostumbramos a ver un rack con los servidores he incluso a pelearnos con los continuos errores de estas maquinas. Por esta razón, es casi natural pasar a una arquitectura IaaS, claro que con esto no quiero decir que sea mejor que PaaS, simplemente es un acercamiento diferente a la administración y arquitectura en la nube.

Azure nos provee de ambos servicios y claro en esta ocasión revisaremos IaaS, un breve recorrido por sus principales características. En próximos post veremos como trabajar con PaaS.

Lo primero que vamos a hacer es instalar el Azure CLI. Este nos provee las herramientas para trabajar en la linea de comandos con Azure; esta manera se me hace mucho mas practica y necesaria para poder automatizar las tareas, sin embargo todo lo que veremos se puede hacer por la interfaz web de Azure con unos cuantos clics.

En este ejemplo vamos a ver como crear crear un par de maquinas virtuales y colocar un balanceado de carga. Pero antes de entrar al código necesitamos responder a unas preguntas muy importantes:

  • ¿Para qué voy a utilizar mi VM?
    Aquí debemos tener claro el objetivo de esta máquina para así determinar que recursos vamos a usar. Azure provee diferentes maquinas virtuales, podemos ver en detalle las características en la documentación. A continuación resumo brevemente sus maquinas y principales usos:

    • Serie A: Desarrollo/pruebas
    • Serie Bs: ampliables económicas
    • Serie D: Proceso de uso general
    • Serie E: Optimizado para aplicaciones en memoria
    • Serie F: Optimizadas para proceso
    • Serie G: Optimizadas para memoria y almacenamiento
    • Serie H: Informática de alto rendimiento
    • Serie Ls: Optimizadas para almacenamiento
    • Serie M: Optimizadas para memoria
    • Serie N: Con GPU

    Ademas tambien debemos tener en cuenta las aplicaciones que vamos a correr en la VM y el sistema operativo a usar, ya que todo esto influye en la selección de la maquina y finalmente en su precio, aquí les dejo la calculadora para estimar los costos de la VM de sus sueños. Una curiosidad es que las maquinas virtuales basadas en Linux no tienen interfaz gráfica por lo que para su uso se requiere el manejo de la linea de comandos por lo menos para su arranque inicial y luego pueden instalar la interfaz gráfica de preferencia.

  • ¿Cuánto tiempo estará encendida?
    Esto es clave para al posterior despliegue podamos programar los auto apagados y obvio esto repercute en el costo de la VM.
  • ¿Cuál es el retorno de la inversion?
    Esta pregunta es clave responderla tanto si es para educación como para un ámbito empresarial. Si es para educación claramente el retorno se ve reflejado en el aprendizaje obtenido, pero en el ámbito profesional debemos demostrar la necesidad y que las anteriores preguntas se respondieron a conciencia, de esta manera se puede justificar la inversion.

Creando una VM desde comandos - Azure CLI

Lo primero será hacer login. Para esto debemos tener una cuenta creada de Azure. Si solo estas probando puedes optar por una suscripción gratuita de 30 días que te permite conocer la plataforma.

az login

Esto nos devolverá un json confirmando el usuario con el que accedimos, ahora estamos listos para comenzar a trabajar con el CLI. Vamos a empezar por consultar las imágenes de SO que podemos instalar en nuestras VM.

az vm image list

En este caso me interesa instalar la imagen de Ubuntu, voy a usar el alias para realizar la instalación. Otro dato es que en las imágenes disponibles de Linux solo se pueden usar las versiones LTS.

Ahora, dependiendo de nuestra suscripción y ubicación tenemos acceso a ciertas localizaciones, las vamos a necesitar, entonces vamos a consultarlas.

az account list-locations

Luego vamos a consultar de una de esas localizaciones que recursos tenemos disponibles. Me interesa para pruebas una maquina de serie A.

az vm list-skus --location westus3 --zone --all --output table

Necesitamos crear un grupo, este nos servirá para agrupar recursos. Estos grupos es muy importantes definirlos de manera correcta, ya que si los recursos son de un mismo grupo facilita muchísimo realizar la mayoría de tareas.

Creamos el grupo asignándole un nombre y pasándole la localización de despliegue de los recursos.

az group create --name Jhontona --location westus3 

Bien, por fin vamos a crear nuestras maquinas virtuales, para esto debemos pasarle el nombre, el grupo, la imagen y el tipo de autenticación, en esta ocasión usaré usuario y contraseña.

az vm create -n VMTest01 -g Jhontona --image UbuntuLTS --authentication-type password --admin-username jhontona --size Standard_A1_v2

Tenemos listas nuestras maquinas y podemos consultarlas con el comando

az vm list

Podemos proceder a actualizar nuestras maquinas e instalar el software necesario. Podemos conectarnos por escritorio remoto o por SSH, aunque recordemos que las instalaciones de Linux por defecto no traen escritorio y generaran una excepción.

Para esta prueba instalare Apache2 pero obviamente puedes instalar cualquier servidor web o aflictivo que requieras. No voy a colocar los pasos de instalación del Apache aquí, por que como mencione aquí depende enteramente del software que necesites.Una vez instalado debemos abrir los puertos necesarios, en mi caso es necesario abrir el puerto 80, por defecto todos los puertos están cerrados.

az vm open-port --resource-group Jhontona --name VMTest01 --port 80
Maquinas virtuales ejecutando Apache

Por defecto al crear una maquina virtual esta se inicia. Podemos detenerla o arrancarla con los siguientes comandos.

az vm start
az vm stop

Balanceo de carga

Necesitamos agregarle una ip publica al grupo que creamos anteriormente, esto con el fin de que el balancer responda a esta IP.

az network public-ip create --resource-group Jhontona --name publicBalancerIP

Ahora vamos a crear el balanceador.

az network lb create --resource-group Jhontona --name lbJhontona --frontend-ip-name frontendPool  --backend-pool-name backendPool --public-ip-address publicBalancerIP

Vamos a evaluar la información y definir las reglas de enrutamiento.

az network lb probe create --resource-group Jhontona --lb-name lbJhontona --name probeLbJhontona --protocol tcp --port 80
az network lb rule create --resource-group Jhontona --lb-name lbJhontona --name ruleLbJhontona --protocol tcp --frontend-port 80 --backend-port 80 --frontend-ip-name frontendPool --backend-pool-name backendPool --probe-name probeLbJhontona

También necesitamos crear una red virtual.

az network vnet create --resource-group Jhontona --name vnBalancer --subnet-name lbSubnet
az network nsg create --resource-group Jhontona --name netSecuriryGroup
az network nsg rule create --resource-group Jhontona --nsg-name netSecuriryGroup --name networkGroupSecurity --priority 1001 --protocol tcp --destination-port-range 80
for i in `seq 1 2`; do
az network nic create --resource-group Jhontona --name nic$i --vnet-name vnBalancer --subnet lbSubnet --network-security-group netSecuriryGroup --lb-name lbJhontona --lb-address-pools backendPool 
done
az vm availability-set create --resource-group Jhontona --name avset

Olvide al crear la IP colocar el parámetro –allocation-method por lo que voy a actualizarlo para que genere IP y luego obtendremos esa IP.

az network public-ip update -g Jhontona -n publicBalancerIP --allocation-method Static
az network public-ip show --resource-group Jhontona --name publicBalancerIP --query "{address: ipAddress}"