Cloud Computing

Azure Resource Manager: Qué es y sus características

En este artículo te contamos al detalle qué es Azure Resource Manager (ARM), sus características prinicipales y las ventajas que nos ofrece.

Publicado el 30 de Diciembre de 2020
Compartir

Qué es Azure Resource Manager

Una de las principales ventajas de cloud computing, es la agilidad para experimentar, implementar entornos de desarrollo y desplegar aplicaciones en producción. Los proveedores de nube trabajan continuamente para mejorar sus servicios y, desde luego, facilitar la administración de estos.

En el caso de Azure, hay una estructura compuesta de varios elementos, están los centros de datos físicos, la capa de virtualización y todas las herramientas para mantener la nube. Al frente, han colocado una interfaz que expone una API RESTful para que puedas interactuar y gestionar los recursos de tus soluciones. Eso es Azure Resource Manager, el servicio que te permite realizar implementaciones y administrar los recursos con mayor facilidad.

Como comprenderás, todo lo que hagas en la Azure pasa por Resource Manager, sin embargo, de alguna manera hay que comunicarse y pedirle que hacer, por lo que es preciso conocer algunos términos.

  • Suscripción: básicamente es la cuenta de facturación, como mínimo tendrás una suscripción, pero puedes tener más. En la suscripción se crean los grupos de recursos.

  • Grupo de recursos: es un contenedor lógico en el que se colocan los recursos que conforman tus soluciones implementadas en Azure.

  • Recurso: máquinas virtuales, redes virtuales, interfaces de red, discos, bases de datos, son algunos ejemplos de recursos. En resumen, todos los servicios y elementos disponibles en Azure son denominados recursos.

  • Proveedores de recursos: se ubican exactamente debajo de la capa de Azure Resource Manager y son las conexiones directas con los recursos. Hay proveedores para todos los servicios de Azure, capacidad de cómputo, almacenamiento, redes, etc. Son muchos para mencionarlos, así que te dejaré el comando de PowerShell con el que puedes obtenerlos. Get-AzResourceProvider -ListAvailable

Cuando creas una cuenta en Azure, inicialmente tendrás una suscripción, dentro de la suscripción creas grupos de recursos, en los cuales organizas o clasificas los recursos que conforman tus soluciones. Por otra parte, Azure ha introducido herramientas como Azure Portal, Azure CLI y las librerías de programación para interactuar con los servicios. Bien, Azure Resource Manager se ubica justo en medio, uniendo todos estos componentes, recibe las solicitudes del usuario, ya sea desde la interfaz de línea de comandos, desde el portal web, API REST o desde algún SDK, y se comunica con los proveedores de recursos.

En la siguiente ilustración te muestro donde se ubica lógicamente Azure Resource Manager en la estructura general de Azure, además, puedes apreciar su función y como se comunica con el resto de los componentes.

Función de Azure Resource Manager

Características de Azure Resource Manager

Múltiples herramientas para gestionar recursos, hay opciones para elegir, puedes usar interfaz gráfica, interfaz de línea de comandos o administrar los recursos mediante programación usando los SDKs.

Escribir infraestructura como código, definiendo plantillas ARM en formato JSON puedes automatizar el aprovisionamiento de recursos, crear entornos replicables, y de esta forma, agilizar la implementación de soluciones en la nube.

Organización, con Azure Resource Manager puedes agrupar los recursos como creas conveniente para tener un mejor control, tanto visual, como a nivel de gestión en general. Es una de las características más importantes para simplificar la administración, puedes aplicar una política determinada a un grupo que contiene un conjunto de recursos, en lugar hacerlo con cada recurso de forma independiente.

Administración de costos, acá el etiquetado juega un papel clave, puedes asignar etiquetas para identificar los recursos que están siendo utilizados. Adicionalmente, puedes aplicar filtros para ver los gastos clasificados y obtener la factura de costos de un grupo de recursos que contienen la misma etiqueta. Por ejemplo, clasificar los gastos de cada departamento.

Control de acceso, cuando hay varias personas trabajando, debes tener cuidado con los permisos que otorgas, definitivamente no puedes compartir las mismas credenciales. Azure Reource Manager permite crear usuarios con permisos y roles específicos. Además, siempre puedes aplicar bloqueos de tipo eliminación o modificación para evitar cambios no autorizados en los recursos.

Sistema de logs, Azure Resource Manager registra todas las llamadas a la API, guarda todo lo que hacen los usuarios con los recursos, lo cual, facilita las tareas de auditoría, ya que Azure ofrece servicios especiales para la monitorización de estos eventos.

Alta disponibilidad, todas las acciones y tareas que se llevan a cabo con Azure Resource Manager se distribuyen en las regiones de Azure, por tanto, puedes estar seguro que el servicio siempre estará disponible, incluso, si ocurriera un desastre natural en una región determinada.

Cómo interactuar con Azure Resource Manager

Existe una variedad de opciones para comunicarse con Azure Resource Manager, tanto si eres desarrollador o te gusta más el área de sistemas, si eres usuario de Windows o GNU/Linux. Estoy seguro que encontrarás la herramienta que mejor se adapte a tus preferencias.

Interfaz gráfica de usuario (GUI)

Para administrar recursos de forma gráfica, tienes disponible la consola web personalizable, Azure Portal. Es la forma más sencilla que existe para interactuar con los servicios de Azure, con unos pocos clics puedes crear soluciones completas. Realmente, lo que se ejecuta por debajo es una plantilla ARM, de tal manera, que también puedes exportar esa plantilla para reutilizarla en caso de ser necesario. Es muy útil cuando estás iniciado en la nube, no obstante, para tareas de automatización es menos eficiente, y al final, es lo que más importa en la actualidad, donde la entrega e implementación continua de software ya no es opcional, es una obligación. Ciertamente, hay casos de uso en los cuales el portal seguirá siendo de gran ayuda.

Normalmente, con imágenes todo se ejemplifica mejor, en este caso no dejaré una captura de pantalla del portal, porque mientras escribo, es posible que estén aplicando algún cambio. El portal recibe actualizaciones frecuentes, pero no hay que preocuparse, la usabilidad web está garantizada.

Interfaz de línea de comandos (CLI)

Azure CLI: es una de las herramientas principales para administrar los recursos en Azure. Puedes hacer la instalación en cualquier plataforma, ya sea Windows, GNU/Linux, Mac o en contenedores Docker. Si eres usuario de GNU/Linux, te resultará muy familiar a Bash. Azure CLI se puede usar de forma interactiva, por tal razón, ya puedes automatizar tareas programando Scripts.

A continuación, te mostraré un ejemplo sencillo para crear un grupo de recursos.

En primer lugar, es fundamental conectarse a Azure con una cuenta autenticada, para ello, ejecuta el siguiente comando:

az login

Una vez iniciada la sesión, puedes crear el grupo de recursos con la siguiente instrucción:

az group create --name Test02 --location eastus --tags @{Department="IT"}

Ten cuidado con los parámetros, Azure CLI diferencia entre mayúsculas y minúsculas. Al momento de crear grupos de recursos, hay dos valores obligatorios: el nombre y la región. Las etiquetas son opcionales, pero es una buena práctica.

Comento rápidamente lo que hace, desde la interfaz de línea de comandos se le pide a Azure Resource Manager crear un grupo de recursos, con nombre ProductionRG, en la región este de EE. UU., y asignarle la etiqueta con clave: Department, y valor: IT.

El resultado de la implementación retorna en formato JSON. Si todo va bien, la clave provisioningState tendrá un valor Succeeded.

Azure PowerShell: la interfaz de línea de comandos por excelencia para administrar sistemas Windows no puede faltar. Si ya tienes experiencia con PowerShell, la administración de Azure te resultará fácil y lo más normal del mundo, prácticamente no hay una curva de aprendizaje, solo debes instalar el módulo az, y con eso basta para trabajar con los servicios de Azure.

Replicaré el mismo ejemplo anterior, creando otro grupo de recursos, esta vez con PowerShell.

El comando para iniciar sesión es el siguiente:

Connect-AzAccount

Para crear el nuevo grupo de recursos ejecuta la siguiente instrucción:

New-AzResourceGroup -Name DevelopmentRG -Location eastus -Tag @{Department="IT"}

Como puedes comprobar, la sintaxis es bastante similar. A diferencia de Azure CLI, PowerShell es flexible con el tema de las mayúsculas y minúsculas en los parámetros.

El resultado de la implementación con PowerShell es el mismo, solo que más fácil de leer.

Cloud Shell: es Azure CLI disponible para acceder desde un navegador web. El único requerimiento es crear una cuenta de almacenamiento porque necesita de un sistema de archivos compartido. Es completamente flexible, puedes elegir Bash o PowerShell. Cloud Shell tiene una ventaja bastante considerable, siempre está actualizada, si hoy se publica un nuevo servicio, perfectamente puedes trabajar, sin tener que actualizar algún módulo.

Cloud Shell

Azure SDK

Si eres desarrollador, esta es la mejor noticia. Existen librerías para gestionar recursos en Azure mediante programación con el lenguaje de tu preferencia. .Net, Java, Python, C, C++, PHP, Ruby, Javascript, Go, son algunos de los lenguajes con los que puedes trabajar.

Infraestructura como código con Azure Resource Manager

Gestionar la infraestructura como código es algo que tienes que hacer sí o sí, cuando trabajas con soluciones en la nube. Imagínate que has creado tu infraestructura simple, una red virtual, una máquina virtual, su disco administrado, interfaz de red, dirección IP y los demás recursos que necesita una máquina virtual. El día de mañana tienes que aplicar un cambio o crear otro entorno similar, tareas repetitivas como esas tienden a aburrir y no agregan ningún valor, aun así, es un escenario pequeño que puedes preparar en poco tiempo.

Ahora, piensa en un entorno más complejo compuesto de varias máquinas virtuales y bases de datos distribuidas en diferentes zonas de disponibilidad, con balanceador de carga y escalado automático, además, debes replicar ese mismo escenario o similar, por la razón que sea, otra aplicación que demanda casi los mismos recursos, o bien, para hacer pruebas. Notarás que necesitas aprovisionar una cantidad importante de recursos, tienes que invertir mucho tiempo en ello, y la posibilidad del error humano siempre está presente. Definitivamente es una tarea compleja. Afortunadamente, se puede definir la infraestructura como código, adoptando las buenas prácticas de desarrollo de software. Con Azure Resource Manager, es posible utilizar plantillas declarativas para automatizar este tipo de tareas.

Las plantillas Azure Resource Manager (ARM), se escriben en formato JavaScript Object Notation (JSON) y permiten automatizar el aprovisionamiento de recursos para soluciones complejas, en una misma plantilla puedes definir múltiples servicios. Importante, al escribir la infraestructura en ficheros puede ser tratada como el código de una aplicación, pudiendo usar un sistema de control de versiones. De esta manera, reduces las tareas manuales propensas a errores, puedes hacer despliegues rápidamente y replicar un escenario las veces que sea necesario, sin temor a equivocarte.

Sin buscas plantillas de inicio rápido, encontrarás un repositorio con diferentes soluciones ya creadas, disponibles para implementar y que puedes reutilizar. Por supuesto, también las puedes crear desde cero.

Te mostraré un ejemplo sencillo. En el siguiente fichero, se define la creación de una red virtual con dos subredes.

{

    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "vNetName": {
            "type": "string"
        },
        "location": {
            "type": "string",
            "defaultValue": "[resourceGroup().location]"
        }
    },
    "resources": [
        {
            "name": "[parameters('vNetName')]",
            "type": "Microsoft.Network/VirtualNetworks",
            "apiVersion": "2019-09-01",
            "location": "[parameters('location')]",
            "tags": {
                "Department": "IT"
            },
            "properties": {
                "addressSpace": {
                    "addressPrefixes": [
                        "10.1.0.0/16"
                    ]
                },
                "subnets": [
                    {
                        "name": "Subnet1-dev",
                        "properties": {
                            "addressPrefix": "10.1.0.0/24"
                        }
                    },
                    {
                        "name": "Subnet2-dev",
                        "properties": {
                            "addressPrefix": "10.1.1.0/24"
                        }
                    }
                ]
            }
        }
    ]
}

Ahora paso a describir de forma breve los elementos que incluye la plantilla del ejemplo.

$schema: es una clave obligatoria y el valor es la ubicación del fichero de esquema JSON, el cual contiene la versión del sistema de implementación y las propiedades disponibles dentro de una plantilla.

contentVersion: clave obligatoria y el valor describe la versión de la plantilla, útil para llevar un control de los cambios. Puede ser cualquier número.

parameters: son claves opcionales con valores no definidos en el código, se pueden especificar al momento de implementar los recursos. En el ejemplo se usan dos parámetros, uno para indicar el nombre del recurso y el otro para la región, para este último, se está pasando un valor por omisión, haciendo referencia a la misma región del grupo de recursos.

resources: se definen todos los recursos o servicios que necesitas para tu solución. En este ejemplo solo es un recurso, la red virtual.

Finalmente, dejo la instrucción para implementar la plantilla con PowerShell. Para este ejemplo, se requieren tres parámetros: nombre para el despliegue, nombre del grupo de recursos y el fichero JSON.

New-AzResourceGroupDeployment -Name VNet -ResourceGroupName DevelopmentRG  -TemplateFile template.json

Como puedes ver, son muchas las ventajas que ofrece Azure Resource Manager y los profesionales de TI lo agradecemos. Espero que hayas comprendido el concepto y la función de este servicio, y que te animes a profundizar en estos temas para implementar soluciones en Azure. En la plataforma hay cursos y talleres que te serán de utilidad para conseguir el objetivo, ser un profesional en Azure. Recuerda, si tienes alguna consulta o comentario, no dudes en escribir.


Compartir este post

También te puede interesar...

Curso de administración de Azure

Curso de administración de Azure

1 hora y 32 minutos · Empresas

Este curso es esencial para aquellos que buscan profundizar en el mundo del almacenamiento y la administración de recursos en Microsoft Azure. Si tienes nociones …

  • Azure
Azure Ephemeral Pipelines

Azure Ephemeral Pipelines

35 minutos y 58 segundos · Taller

En este taller analizaremos las características de Azure DevOps, el concepto de pipeline y realizaremos una demo en la que crear un Ephemeral Agent para …

  • Azure
Tecnología

Qué es Azure: Introducción a la nube de Microsoft

28 Octubre 2019 Jesus Lucas
Artículos
Ver todos