Desplegar entornos con Azure Resource Manager templates

Una de las novedades que acompañan al nuevo portal de Microsoft Azure es el concepto Azure Resource Manager, el cual permite desplegar entornos completos a través de plantillas. En este post voy a mostrarte cómo hacerlo utilizando el proyecto de Visual Studio llamado Azure Resource Group (es necesaria la última versión del SDK de Azure, en el momento de este post la 2.6).

Azure Resource Group deployment project
Azure Resource Group deployment project

Al crear este tipo de proyecto aparecerá un segundo cuadro de diálogo donde podemos elegir una de las plantillas disponibles desde Visual Studio.

Azure Resource Manager templates
Azure Resource Manager templates

Con el fin de comprender este tipo de proyectos, voy a utilizar la llamada Blank Template que contiene únicamente la estructura.

AzureResourceGroupDeployment - Solution explorer
AzureResourceGroupDeployment – Solution explorer
  • /Scripts/Deploy-AzureResourceGroup.ps1: es el script en PowerShell que subirá los archivos necesarios y  llamará a Azure Resource Manager con la plantilla y los parámetros requeridos.
  • /Templates/DeploymentTemplate.json: se trata de la plantilla que define cómo será tu entorno: los recursos que utilizará, la configuración de cada uno de ellos, cómo se relacionan entre sí, etcétera. Existen 5 seciones dentro de este archivo, representadas en formato JSON:
    {
        "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
        },
        "variables": {
        },
        "resources": [
        ],
        "outputs": {
        }
    }
    
    • schema: URL del esquema que se va a utilizar en la plantilla. Si navegas por él puedes ver todas las opciones disponibles a día de hoy. También nos aportará el Intellisense necesario para la edición del este archivo.
    • parameters: valores que serán modificados en un futuro. Cada uno de los parámetros definidos podrá tener un valor por defecto, valores permitidos, tipo, etcétera.

      Azure Resource Manager - Parameters
      Azure Resource Manager – Parameters
    • variables: Como su propio nombre indica se tratan de variables dentro de la plantilla, de tal forma que podamos reutilizarlas a lo largo del archivo, sin ser candidatas para ser un valor parametrizable. Imaginate un ejemplo sencillo donde quieres deplegar un entorno y quieres parametrizar los nombres de los recursos pero quieres que todos ellos estén en West Europe. En ese caso podríamos utilizar la variable region para ser reutilizada en cada uno de los recursos que vayamos creando.

      Azure Resource Manager - Variables
      Azure Resource Manager – Variables
    • resources:  Se trata de la sección principal del archivo. En ella se definen los recursos que se van a desplegar en la plataforma Microsoft Azure. Inicialmente la forma de añadir los recursos era valiéndose del propio Intellisense de Visual Studio, utilizando plantillas de ejemplo, o siguiendo el esquema definido en la parte superior.
      Azure Resource Manager - Resources
      Azure Resource Manager – Resources
      Azure Resource Manager - JSON Outline
      Azure Resource Manager – JSON Outline

      Una de las mejoras que se introdujo con la versión 2.6 del SDK es la ventana JSON Outline, la cual te permite visualizar los parámetros y variables definidos, los recursos que se van a crear y las claves establecidas en el apartado outputs.
      En la versión anterior de este proyecto era más complejo crear recursos, ya que no existía ningún asistente que nos ayudara. Se ha mejorado en ese sentido dandote la posibilidad de poder agregar recursos a través de esta ventana:

      Azure Resource Manager - JSON Outline - Add New Resource
      Azure Resource Manager – JSON Outline – Add New Resource

      En este caso aparecerá un asistente con los recursos disponibles a día de hoy:

      Azure Resource Manager - Add resource wizard
      Azure Resource Manager – Add resource wizard

      Para ver un ejemplo, puedes seleccionar el recurso WebApp, que a su vez estará asociado con un App Service plan (Server farm).

      Add Resource - App Service Plan
      Add Resource – App Service Plan

      Los nombres que se piden no son el nombre del servicio que se va a crear sino un nombre identificativo del recurso. En este ejemplo, una vez creados el recurso App Service Plan y WebApp la plantilla se actualizará con nuevos parámetros y recursos.

      Azure Resource Manager - WebApp and App Service Plan created
      Azure Resource Manager – WebApp and App Service Plan created
    • outputs: En esta sección podemos añadir un conjunto de claves para comprobar su resultado después del despliegue.

      Azure Resource Manager - Outputs
      Azure Resource Manager – Outputs
  • /Templates/DeploymentTemplate.param.dev.json: en este archivo se recogerán todos aquellos valores que sean parametrizables, como por ejemplo el nombre del website, hosting plan, ubicación de los recursos, usuarios, etcétera. Está pensado para compensar el apartado parameters del archivo mencionado anteriormente.
    {
        "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
        }
    }
  • /Tools/AzCopy.exe: ya hable hace tiempo sobre esta herramienta en un post anterior. La misma es utilizada por el script de PowerShell para subir los archivos necesarios.

Cuando estés listo para desplegar tu nuevo entorno basta con hacer clic con el botón derecho sobre el proyecto y seleccionar la opción Deploy > New Deployment.

Azure Resource Manager - Deploy - New Deployment
Azure Resource Manager – Deploy > New Deployment

Aparecerá un nuevo asistente donde deberás elegir/crear el Resource Group donde quieres hacer el despliegue. De manera automática la plantilla y el archivo de parámetros serán seleccionados.

Azure Resource Manager - Deploy to Resource Group
Azure Resource Manager – Deploy to Resource Group

Al seleccionar la opción Deploy se mostrará una ventana con los parámetros que debemos rellenar.

Azure Resource Manager - Edit Parameters
Azure Resource Manager – Edit Parameters

Una vez completados los valores, guardamos los valores y comenzará la creación. En la ventana Output puedes comprobar el progreso.

Azure Resource Manager - Output during deployment
Azure Resource Manager – Output durante el despliegue

Una vez finalizado puedes acceder al nuevo portal de Azure y buscar el conjunto de recursos por el nombre de tu Azure Resource Group.

AzureResourceGroupDeployment on Azure Portal
AzureResourceGroupDeployment en el nuevo portal de Microsoft Azure

En la página oficial de Microsoft Azure existe ahora una sección llamada Community > Templatesen el menú superior, donde podrás descargar plantillas de terceros.

¡Saludos!