Saltar al contenido principal
marzo 24, 2021

Project Bicep, el nuevo ARM DSL de Microsoft

¿Qué es Project Bicep?

Bicep es un nuevo DSL (lenguaje específico de dominio) para desplegar recursos de Azure de forma declarativa. Su objetivo es simplificar la experiencia en las plantillas ARM para desplegar recursos de Azure, con una sintaxis más limpia, modularidad y reutilización de código.

Proporciona una abstracción transparente sobre las plantillas ARM (sabemos que las plantillas ARM no son las más fáciles de escribir). Todas las cosas que podemos hacer con las plantillas ARM hasta ahora (y en el futuro), se pueden hacer con Bicep (excepto las limitaciones conocidas que Microsoft espera resolver en otras versiones). Sin embargo, Bicep está listo para el uso de producción y junto con algunas de las herramientas de este post, ahora es mucho más fácil de construir plantillas ARM.

Por lo tanto, quería hacer una introducción sencilla, pues me parece útil conocer este nuevo DSL, su simplicidad y características que tendrá sobre las plantillas ARM tradicionales para desplegar recursos de Azure. Permitirá a los desarrolladores construir plantillas ARM más rápido y fácil que nunca.

¿Por qué debería interesarme?

Ya hay alternativas como Terraform, Pulumi y otras ofertas de IaC para evitar la complejidad de las plantillas ARM. Bueno, me gustaría admitir que he utilizado Terraform para Azure en algunos proyectos y estoy muy contento con él. Su proveedor de Azure es realmente impresionante, pero, en algunos casos, como con nuevas características, productos o configuraciones de Azure tendremos que esperar al proveedor para implementar estos cambios.

En lugar de esto, Bicep estará cubierto en todos los planes de soporte de Azure a partir de la versión 0.3. Como se compila directamente a plantillas ARM en ficheros JSON y está soportado y respaldado por Microsoft, deberíamos tener todas las nuevas características, productos y configuraciones disponibles out of the box (lo que es tranquilizador).

Esquema de la arquitectura de Azure Resource Manager (extraído de «Project Bicep Demo en Ignite 2020 por Mark Russinovich”)

En mi opinión, después de probar Bicep, creo que merece una oportunidad para los desarrolladores a la hora de desplegar recursos en Azure. Sin embargo, es importante destacar que no hay razón para cambiar a Bicep si ya estás utilizando Terraform u otro proveedor de IaC, ya que los proveedores han puesto mucho esfuerzo para hacer que funcionen bien con Azure, e incluso Microsoft está respaldando este esfuerzo. La realidad es que hay muchos proyectos que utilizan plantillas ARM y Microsoft está tratando de hacer más fácil la gestión y proporcionar sus propias herramientas para empezar con IaC (sin tener que depender de terceros).

Primeros pasos…

Es muy sencillo comenzar con Bicep. Solo necesitamos instalar las herramientas necesarias (CLI y opcionalmente, la extensión de VS Code). El proceso es simple y está documentado en el repositorio de Bicep. Ten en cuenta que también hay un módulo PowerShell Bicep si queremos tener la misma funcionalidad de Bicep CLI en PowerShell.

El siguiente paso es aprender sobre Bicep y su sintaxis. Un buen punto de partida es el tutorial oficial. También hay grandes recursos para probar, como el Bicep Playground y el Visual Studio Code Devcontainer/Codespaces repo.

Después de este proceso, y después de jugar un poco, deberíamos estar listos para usarlo fácilmente sobre nuestras plantillas de Azure.

Esquema del Proyecto Bicep (Extraído de “Project Bicep Demo en Ignite 2020 por Mark Russinovich”)

Interpretando el esquema anterior, el proceso sería tan simple como

bicep build my-deployment.bicep # Solo este paso extra

az deployment group create my-deployment.json

Solo con este paso adicional, estamos simplificando mucho el proceso de creación de plantillas ARM y obteniendo muchos beneficios. Uno de ellos y que me pareció muy interesante, es la posibilidad de hacer archivos separados para generar un solo archivo ARM.

Echemos un vistazo rápido a sus diferencias respecto a un archivo ARM (que son equivalentes), a partir de una plantilla quickstart simple del repositorio de Azure:

Implementación de una base de datos SQL simple en la mitad de líneas y mucho más legible (Izquieda: Bicep, Derecha: ARM)

Parece sencillo, y lo es, pero…

¿Cómo convertir plantillas ARM al formato Bicep?

Hay dos enfoques diferentes:

  • Existe una hoja de equivalencias disponible para comparar la sintaxis de la plantilla ARM con el equivalente nativo de Bicep. Este documento debería permitirnos comenzar a convertir plantillas ARM existentes a su equivalente en Bicep y empezar a simplificarlas y a usar sus características.
  • La opción ‘decompilar’ disponible en el Bicep CLI. Esta opción es realmente genial y, generalmente, funciona muy bien. Es importante tener en cuenta que, debido a que no hay una conversión garantizada de JSON a Bicep, la decompilación puede fallar, o puede quedar con errores/ advertencias en el archivo Bicep generado para arreglar. Sin embargo, es la forma más fácil de obtener archivos de bicep de nuestros ARM. Tan simple como ejecutar: bicep decompile my-arm-template.json

Sin embargo, es importante destacar que, ya que Bicep compila hasta las plantillas ARM, también podríamos tener plantillas Bicep y ARM que coexisten al mismo tiempo, y convertir gradualmente las plantillas o dejar que la antigua se mantenga como plantilla ARM estándar (como el desarrollador quiera).

El enfoque en nuestro proceso de implementación será casi el mismo, ya que solo introduciremos un paso extra en nuestro proceso de implementación: la compilación de archivos Bicep hasta su equivalente en plantilla JSON ARM antes de desplegar las plantillas ARM.

Bicep en nuestros procesos de despliegue

Con Bicep, su «única» herramienta, podríamos implementar fácilmente la compilación de archivos en casi todos los entornos. Un enfoque simple y genérico sería descargar el binario de las versiones de GitHub y ejecutar el binario con nuestros archivos de Bicep a JSON.

Aunque es fácil implementar este enfoque genérico, la comunidad y Microsoft en sí están empezando a proporcionarnos las herramientas necesarias para incluir un paso para Bicep en nuestros canales.

Azure DevOps Pipelines

Para Azure DevOps Pipelines, ya tenemos algunas tareas implementadas para abstraer y simplificar el proceso en un par de tareas, que se pueden encontrar en el README del proyecto oficial o en el Visual Studio Marketplace.

Sin embargo, si no te gusta incluir extensiones de terceros en tu organización de Azure DevOps, podemos hacer nuestro propio pipeline (una simple muestra de GitHub Action en el repositorio oficial, podría utilizarse como base).

GitHub Actions

Existe una acción de GitHub desarrollada por la comunidad para incluir Biceo en nuestro proceso de despliegue al usar GitHub Actions. Como se dice en la sección Azure DevOps Pipelines, podríamos implementar nuestra propia acción (hay una simple muestra de GitHub Action en el respositorio oficial)

Otros escenarios CI/CD

Bicep es solo un binario multiplataforma en si. Así que, hoy en día, creo que no habría ningún problema en cualquier entorno de CI/ CD para introducir un paso adicional para compilar archivos ‘.bicep’.

Solo sería un ejecutable que podría ser descargado en cada ejecución o guardado en nuestro entorno, que necesitamos para ejecutar contra una serie de archivos ‘.bicep ‘.

En realidad, no hay razón alguna para no darle una oportunidad a Microsoft Bicep.

Hay mucho más sobre el Proyecto Bicep por descubrir (¡y más características por venir!). Por ahora, queríamos darte esta serie de conceptos iniciales para que puedas empezar a probar todo lo que puede llegar a ofrecer.

Autor
Raul Piraces
Software Development Engineer

Formulario de descarga

¡Gracias!