Las plantillas ARM (Azure Resource Manager) nos permiten parametrizar y automatizar la creación y despliegue de toda la infraestructura Azure necesaria en un proyecto (la web, el service plan, las bases de datos, etc…) permitiendo así la creación de nuevos entornos exactamente iguales en cuestión de minutos y sin esfuerzo. Además, como por defecto el despliegue es incremental, si modificamos algún elemento de la ecuación este se actualizará sin afectar al resto.
Vamos a ver como crear una plantilla ARM y como integrarla en el proceso de despliegue.
Lo primero que hay que hacer es crear un nuevo proyecto de tipo Cloud > Azure Resource Group. (Si no lo tienes, descarga Azure SDK)
Primero nos preguntara si queremos empezar en blanco o con alguna de las plantillas pre-determinadas que existen. Para el ejemplo usaremos la plantilla en blanco. Una vez seleccionado nos crea el proyecto base sobre el que trabajar, que contiene dos .json y un .ps1. El primero, azuredeploy.json es donde estará la definición de la plantilla y el que mas nos interesa ahora. El .json de parámetros sirve para definir los parámetros de entrada de la plantilla (spoiler: yo no lo uso para nada) y el último es un PowerShell para lanzar la ejecución de la plantilla (spoiler 2: tampoco lo voy a usar).
Vayamos pues donde interesa, que es la definición de la plantilla. Como has podido adivinar, la plantilla nos es mas que un JSON de configuración (que puede llegar a ser tedioso de manejar…). AzureDeploy.json tiene un aspecto como este cuando esta recién creado:
Vemos que esta dividido en «parameters», «variables», «resources» y «outputs». Vamos a ir viendo cada una de las agrupaciones a medida que vayamos creando la plantilla, pero su nombre ya lo dice todo.
Para empezar a trabajar yo utilizo la vista «JSON Outline» que esta en Vista > Otras ventanas:
Esto te abre la vista que nos permite añadir nuevos elementos, además que nos señala el grupo en el código al seleccionarlo, estoy cuando hay muchos elementos se agradece.
Desde la ventana de «JSON Outline» haciendo click derecho sobre resources podras añadir nuevos recursos. Estos te crearan los parámetros y variables que necesites. Posiblemente tendrás que «jugar» y pulir el JSON, a mí al principio me costo bastante, pero es cuestión de coger el tranquilo.
Una vez tengas creados todos tus recursos, es hora de integrarlo en el despliegue de la aplicación.
Lo primero que hemos de hacer es añadir la plantilla en la que hemos trabajado como artefacto en el pipeline de despliegue del proyecto. Yo la creo en un repositorio GIT y añado directamente el repo como artefacto. De esta forma si hay algún cambio en la plantilla esta siempre apuntando a la última versión.
Luego, dentro del entorno que estemos configurando, se ha de crear una primera tarea de del tipo «Azure Resource Group Deployment». Una vez creada la tarea, solo quedará configurar todos los valores.
Indica el nombre para el grupo de recursos (por si no lo he mencionado, toda la plantilla se crea en un grupo de recursos), selecciona la localización del grupo de recursos (los recursos que crees, podrán estar en otras localizaciones, que además podrás parametrizar según las necesidades con los parámetros), luego indica la localización, en nuestro caso es el artefacto que hemos vinculado antes y selecciona el fichero .json donde esta la plantilla. Por defecto esta seleccionado el despliegue en modo incremental.
Por último, podemos sobre-escribir los parámetros que hemos configurado en la plantilla, VSTS nos lo pone fácil y nos muestra una ventana para introducir cada uno de los parámetros que tenemos definidos en la plantilla. Te recomiendo que utilices variables de entorno para configurar esta parte.
Y ya lo tendríamos, ahora solo queda lanzar la release y comprobar que todos los servicios se crean correctamente.
Un comentario en «Despliegue continuo en Azure con plantillas ARM»