Elena Canorea
Communications Lead
*Post actualizado con las últimas novedades disponibles
Bicep es el 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 construir plantillas ARM.
Por lo tanto, quería hacer una introducción sencilla, pues me parece útil conocer este nuevo DSL, su simplicidad y las 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.
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. Sus proveedores de Azure son realmente impresionantes, pero, en algunos casos, como con nuevas características, productos o configuraciones de Azure, tendremos que esperar al proveedor para implementar estos cambios (o no estará disponible en un futuro previsible, como la integración del Portal Azure). Utilizar el “AzAPI Provider” en lugar del “AzureRM provider” resuelve la espera para que el proveedor implemente el soporte para los cambios más recientes en Azure. Si usamos el «AzAPI Provider», estaremos usando la misma API que usa Bicep para desplegar recursos. Sin embargo, tendremos que lidiar con el estado de Terraform, sin integración con Azure Portal y faltando algunas funcionalidades de integración como Azure Policies.
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).
Bicep y Terraform son dos ofertas líderes de IaC (Infraestructura como código). En cuanto a infraestructura, integración y usabilidad, ambos tienen características muy fáciles de usar que los hacen muy similares en algunos aspectos. Un concepto clave que se debe saber es que no hay características de usabilidad importantes cuando se usa Bicep versus Terraform.
Sus funcionalidades respecto a infraestructura e integración facilitan a los desarrolladores la implementación de soluciones IaC. La única decisión importante para tener en cuenta es si está implementando en más de un proveedor (o si su infraestructura consistirá en un entorno múltiple/híbrido). Si la respuesta es afirmativa, entonces Terraform se adaptará mejor, ya que Bicep es únicamente para recursos de Azure.
Al realizar una comparación más profunda, hay algunas diferencias clave que debemos saber:
Debemos asegurarnos de considerar los conceptos anteriores (y los requisitos y preferencias de infraestructura) para tomar la mejor decisión para tu organización.
Es muy sencillo comenzar con Bicep. Solo necesitamos la CLI de Azure. Depende de ti instalar otras herramientas (CLI, la extensión VS Code, etc.). El proceso para estas herramientas es sencillo 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 tras 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
¡Pero podemos saltarnos ese paso extra! Ya que tanto Az CLI (2.20.0+) como el módulo PowerShell Az (v5.6.0+) tienen soporte para Bicep incorporado:
az deployment group create my-deployment.bicep
Con Bicep, estamos simplificando mucho el proceso de creación de plantillas ARM y obteniendo muchos beneficios. Uno de ellos 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 (Izquierda: Bicep. Derecha: ARM)
Parece sencillo, y lo es, pero…
Hay dos enfoques diferentes:
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.
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. Pero esto no es necesario en absoluto como se comentó antes, con las nuevas versiones de Azure CLI y el módulo PowerShell Az.
Aunque es fácil implementar este enfoque genérico, la comunidad y Microsoft en sí están empezando a proporcionarnos las extensiones, paquetes y acciones necesarias para incluir el “tooling” de Bicep en nuestros pipelines.
Para Azure DevOps Pipelines, ya tenemos algunas tareas implementadas con el fin de 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 (descargando el “tooling” necesario por nuestra cuenta).
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 (descargando el “tooling” necesario por nuestra cuenta).
Bicep es solo un binario multiplataforma, 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 con el que manejar archivos ‘.bicep’. No obstante, si el propósito es solo el de desplegar, no es necesario.
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 pruebes todo lo que puede ofrecer.
Elena Canorea
Communications Lead