Para lograr la escala, los equipos de DevOps siempre buscan formas de implementar código rápidamente con un proceso de confianza y repetible. En lo que respecta a la nube y a la infraestructura, este proceso se realiza cada vez más con la infraestructura como código (IaC). Las herramientas de IaC van desde herramientas de uso general hasta herramientas diseñadas para entornos específicos. Terraform es un ejemplo del anterior, mientras que Bicep está diseñado para controlar las tareas relacionadas con Azure.
En este artículo, compararemos nueve características de infraestructura e integración de Bicep y Terraform. Comprender estas diferencias le ayudará a decidir qué herramienta mejor es compatible con la infraestructura y los procesos.
Estado y back-end
Tanto Terraform como Bicep son la configuración de estado deseada (DSC), lo que facilita la administración de la infraestructura de TI y desarrollo como código. Terraform almacena el estado sobre la infraestructura administrada y la configuración. Terraform usa esta información para asignar recursos reales a la configuración, realizar un seguimiento de los metadatos y mejorar el rendimiento de las infraestructuras más grandes. El estado se almacena en un archivo local denominado terraform.tfstate
, pero también se puede almacenar de forma remota. Es fundamental realizar copias de seguridad y proteger los archivos de estado. Al igual que Terraform, Bicep es declarativo y busca objetivos. Sin embargo, Bicep no almacena el estado. En su lugar, Bicep se basa en la implementación incremental.
Destinos de infraestructura
Al comparar Bicep con Terraform para administrar la infraestructura en la nube, es importante tener en cuenta el entorno de nube de destino:
- Solo Azure
- Nubes híbridas o múltiples
Bicep es específico de Azure y no está diseñado para trabajar con otros servicios en la nube.
Si su objetivo es automatizar las implementaciones en cualquiera de los siguientes entornos, Es probable que Terraform sea una mejor opción:
- Entornos de virtualización
- Escenarios de varias nubes, como Azure y otras nubes
- Cargas de trabajo locales
Terraform interactúa con otros proveedores de nube o API mediante complementos denominados proveedores. Hay varios proveedores de Azure de Terraform que permiten la administración de la infraestructura de Azure. Al codificar una configuración de Terraform, especifique los proveedores necesarios que va a usar. Al ejecutar terraform init, el proveedor especificado se instala y se puede usar desde el código.
Las herramientas de interfaz de línea de comandos (CLI) desempeñan un papel clave en la orquestación a través de la implementación y administración de la tecnología de automatización. Bicep y Terraform ofrecen herramientas de la CLI.
Bicep se integra con la CLI de Azure, lo que permite a los desarrolladores usar az
comandos como:
La CLI de Terraform le permite realizar tareas como validar y dar formato al código de Terraform, y crear y aplicar un plan de ejecución.
Bicep también proporciona una característica que facilita la integración de Bicep con Azure Pipelines. Hay una característica similar disponible para Terraform, pero debe descargar e instalar la extensión Azure Pipelines Terraform Tasks para Visual Studio. Una vez instalado, puede ejecutar comandos de la CLI de Terraform desde Azure Pipelines. Además, Terraform y Bicep admiten Acciones de GitHub para automatizar compilaciones de software, pruebas e implementaciones.
Processing
Existen algunas diferencias importantes entre Bicep y Terraform en términos de eficiencia y optimización de las implementaciones. Con Bicep, el procesamiento se produce en el lado principal del servicio de infraestructura de Azure. Esta característica ofrece ventajas como el procesamiento previo para comprobar la directiva o la disponibilidad para implementar varias instancias dentro de una región. Con Terraform, el procesamiento se realiza dentro del cliente de Terraform. Por lo tanto, el procesamiento previo no implica llamadas a Azure, ya que usa el estado y HCL (hashiCorp Language) para determinar los cambios necesarios.
Authentication
Las características de autenticación de Azure varían entre Bicep y Terraform. Con Bicep, se proporciona un token de autorización durante la solicitud para enviar un archivo de Bicep y una plantilla de ARM. ARM garantizará que tiene permiso para crear la implementación e implementar recursos dentro de la plantilla especificada. Terraform autentica cada API en función de las credenciales del proveedor, como la CLI de Azure, la entidad de servicio o las identidades administradas para los recursos de Azure. Además, se pueden usar varias credenciales de proveedor en una única configuración.
Integraciones de Azure
También debe tener en cuenta el uso de características de Azure, como Azure Policy y cómo interactuarán con otras herramientas y lenguajes. Las características de validación preparatoria de Bicep pueden determinar si una directiva denegará un recurso y producirá un error antes de una implementación. Por lo tanto, los desarrolladores pueden corregir los recursos con la directiva mediante plantillas de ARM proporcionadas. La plantilla de ARM se puede usar para crear una asignación de directiva a otro recurso para la corrección automatizada. Sin embargo, Terraform producirá un error cuando se implemente un recurso que no está permitido por la directiva.
Integración del portal
Una ventaja importante que Bicep tiene sobre Terraform es la capacidad de automatizar las acciones del portal. Con Bicep, puede usar la Azure Portal para exportar plantillas. La exportación de una plantilla le ayuda a comprender la sintaxis json y las propiedades que implementan los recursos. Puede automatizar futuras implementaciones empezando por la plantilla exportada y modificándola para satisfacer sus necesidades. Pero tenga en cuenta que deberá descompilar la plantilla de ARM exportada hasta que se admitan las plantillas de Bicep.
Aunque Terraform no proporciona las mismas integraciones del portal que Bicep, la infraestructura de Azure existente se puede realizar en la administración de Terraform mediante Azure Terrafy. (Azure Terrafy es una herramienta de código abierto propiedad y mantenida por Microsoft).
Cambios fuera de banda
Los cambios de configuración fuera de banda son cambios realizados en una configuración de dispositivo fuera del contexto de la herramienta. Por ejemplo, supongamos que implementa un conjunto de escalado de máquinas virtuales mediante Bicep o Terraform. Si cambia ese conjunto de escalado de máquinas virtuales mediante el portal, el cambio sería "fuera de banda" y desconocido para la herramienta IaC.
Si usa Bicep, los cambios fuera de banda deben conciliarse con Bicep y el código de la plantilla de ARM para evitar que esos cambios se sobrescriban en la siguiente implementación. Estos cambios no bloquearán la implementación.
Si usa Terraform, debe importar los cambios fuera de banda en el estado de Terraform y actualizar la HCL.
Por lo tanto, si un entorno implica cambios frecuentes fuera de banda, Bicep es más fácil de usar. Al usar Terraform, debe minimizar los cambios fuera de banda.
Marcos de trabajo en la nube
El Cloud Adoption Framework (CAF) es una colección de documentación, procedimientos recomendados y herramientas para acelerar la adopción de la nube a lo largo del recorrido de la nube. Azure proporciona servicios nativos para implementar zonas de aterrizaje. Bicep simplifica este proceso con una experiencia del portal basada en plantillas de ARM e implementación de zona de aterrizaje. Terraform usa un módulo de Zonas de aterrizaje a escala empresarial para implementar, administrar y poner en marcha con Azure.
Resumen
Bicep y Terraform ofrecen muchas características de integración e infraestructura fáciles de usar. Estas características facilitan la implementación y administración de la tecnología de automatización. Al decidir cuál es lo mejor para su entorno, es importante tener en cuenta si va a implementar en más de una nube o si la infraestructura constará de un entorno de nube híbrida o múltiple. Además, asegúrese de tener en cuenta las nueve características que se describen en este artículo para tomar la mejor opción para su organización.
Las organizaciones actuales se enfrentan a desafíos dinámicos que requieren una gran flexibilidad y agilidad. Los entornos de nube pública satisfacen estas necesidades a través de la automatización, especialmente a través de la infraestructura como código (IaC). Dos opciones principales de IaC son Hashicorp Terraform y Bicep. Terraform es una herramienta de código abierto que ayuda a los profesionales de DevOps a administrar servicios locales y en la nube mediante código declarativo. Microsoft Bicep usa la sintaxis declarativa para simplificar la implementación de recursos de Azure.
En este artículo, compararemos varias características clave de la experiencia del usuario para identificar similitudes y diferencias entre Terraform y Bicep.
Sintaxis del lenguaje
Bicep y Terraform son lenguajes específicos del dominio (DSL) que son fáciles de usar y ahorran tiempo para desarrolladores. Ambas herramientas incorporan palabras clave y conceptos similares. Algunos de estos conceptos son parametrización, compatibilidad con proyectos de varios archivos y compatibilidad con módulos externos. Sin embargo, Terraform ofrece una biblioteca más completa de funcionalidad integrada para determinadas tareas. Decidir entre los dos es una cuestión de preferencia y experiencia. A continuación se muestran breves información general y algunas de las características fáciles de usar que ofrece cada sintaxis de lenguaje.
Bicep es un lenguaje declarativo. Por lo tanto, el orden en el que se definen los elementos en el código no afecta a cómo se procesa la implementación. El ámbito de destino predeterminado de Bicep es resourceGroup
. Los usuarios pueden emplear variables para encapsular expresiones complejas y hacer que los archivos de Bicep sean más legibles. El concepto de módulos permite reutilizar el código de Bicep en proyectos o equipos.
Terraform también es un lenguaje declarativo que aprovecha el lenguaje de configuración hashiCorp (HCL). El propósito principal de HCL es declarar recursos. Otras características de lenguaje sirven para que la definición de recursos sea más cómoda. Y como Bicep, el orden del código en los archivos de configuración de Terraform no es significativo.
Asistentes de idioma
Bicep y Terraform proporcionan asistentes de lenguaje para simplificar las tareas de codificación. Dado que ambos son fáciles de usar, la elección depende en gran medida de las preferencias y los requisitos.
Bicep admite expresiones para que el código sea más dinámico y flexible. Se pueden usar diferentes tipos de funciones en un archivo de Bicep. Algunos de estos tipos de función son funciones lógicas, numéricas y de objeción. Los bucles pueden definir varias copias de un recurso, un módulo, una propiedad, una variable o una salida. Los bucles ayudan a evitar la repetición de la sintaxis en un archivo de Bicep.
Terraform también ofrece funciones integradas a las que se llama desde dentro de expresiones para transformar y combinar valores. Al igual que Bicep, las expresiones de Terraform pueden incluir expresiones complejas, como referencias a datos exportados por recursos y evaluación condicional. Los bucles pueden controlar colecciones y pueden generar varias instancias de un recurso sin necesidad de repetir código.
Módulos
Bicep y Terraform admiten el concepto de módulos. Los módulos permiten crear componentes reutilizables a partir del código. Los módulos desempeñan un papel clave en el escalado de la infraestructura y mantienen la configuración limpia. Dado que los módulos encapsulan grupos de recursos, reducen la cantidad de código que se debe desarrollar para componentes de infraestructura similares. Aunque los módulos funcionan de forma similar en Bicep y Terraform, varían en la implementación.
En Bicep, un módulo es simplemente un archivo de Bicep que se implementa desde otro archivo de Bicep. Los módulos de Bicep sirven para mejorar la legibilidad de los archivos de Bicep. Estos módulos también son escalables. Los usuarios pueden compartir módulos entre equipos para evitar la duplicación de código y reducir los errores. Para obtener más información sobre cómo definir un módulo de Bicep, consulte Módulos de Bicep.
En Terraform, los módulos son los principales medios de empaquetado y reutilización de configuraciones de recursos en todos los equipos. Los módulos de Terraform son contenedores para varios recursos que se empaquetan como una sola unidad lógica. Un módulo consta de una colección de .tf
archivos o .tf.json
almacenados juntos en un directorio. Además de los módulos del sistema de archivos local, Terraform también puede cargar módulos desde varios orígenes. Estos orígenes incluyen el Registro, la ruta de acceso local, los módulos y GitHub.
Ciclo de vida de aprovisionamiento
Terraform y Bicep permiten a los desarrolladores validar una configuración antes de la implementación y, a continuación, aplicar los cambios. Terraform proporciona más flexibilidad para destruir todos los objetos remotos administrados por una configuración determinada. Esta característica es útil para limpiar objetos temporales una vez completado el trabajo. Es fundamental tener en cuenta los requisitos del ciclo de vida de las implementaciones de infraestructura típicas al elegir la mejor opción.
Bicep ofrece una operación what-if que le permite obtener una vista previa de los cambios antes de implementar un archivo de Bicep. Azure Resource Manager proporciona la what-if
operación y no realiza ningún cambio en los recursos existentes. A continuación, es posible usar Azure PowerShell o la CLI de Azure con los archivos de Bicep para implementar los recursos en Azure. La implementación de archivos de Bicep remotos no es compatible con Azure PowerShell o la CLI de Azure. Sin embargo, puede usar la CLI de Bicep para compilar el archivo de Bicep en una plantilla JSON y, a continuación, cargar el archivo JSON en una ubicación remota.
En Terraform, el comando terraform plan es similar a la operación de Bicep what-if
. Con el terraform plan
comando , se crea un plan de ejecución para obtener una vista previa antes de aplicarlo. Después, aplique el plan de ejecución mediante el comando terraform apply . Casi todo lo que haga con Terraform implicará el uso de los terraform plan
comandos y terraform apply
.
Introducción
Bicep y Terraform ofrecen recursos para ayudarle a empezar. El módulo Learn para Bicep le ayuda a definir cómo deben configurarse los recursos de Azure. También se le guiará a través de las implementaciones de varios recursos de Azure para ofrecer experiencia práctica.
Del mismo modo, HashiCorp Learn proporciona a los usuarios varios recursos de aprendizaje de Terraform para enseñar a instalar y usar Terraform. Estos recursos incluyen información que muestra cómo usar Terraform para aprovisionar la infraestructura en Azure.
Creación de código
La experiencia de creación de código depende del número de complementos que están disponibles para el editor que prefiera. Afortunadamente, Bicep y Terraform ofrecen recursos para mejorar la eficacia de la creación de código.
Para Bicep, uno de los complementos más eficaces es la extensión de Visual Studio Code de Bicep. La extensión proporciona características como la validación de código, IntelliSense, el acceso a la propiedad dot-property y la finalización automática de propiedades.
Para Terraform, la extensión de Visual Studio Codeterraform con Terraform Language Server ofrece muchas de las mismas características que la extensión de Visual Studio Code de Bicep. Por ejemplo, la extensión también admite el resaltado de sintaxis, IntelliSense, la navegación por código y un explorador de módulos. HashiCorp también ofrece [instrucciones de instalación detalladas] en su repositorio de GitHub (https://github.com/hashicorp/terraform-ls/blob/main/docs/USAGE.md) para configurar y usar terraform Language Server.
Cobertura de Azure
Bicep tiene una ventaja sobre Terraform en lo que respecta a la configuración de recursos de Azure. Bicep está profundamente integrado con los servicios de Azure. Además, ofrece compatibilidad inmediata con las nuevas características de Azure. Terraform proporciona dos proveedores que permiten a los usuarios administrar Azure: AzureRM y AzAPI. El proveedor de AzureRM ofrece una experiencia totalmente adaptada para los servicios estables de Azure. A veces, llegar a esta experiencia personalizada puede dar lugar a un retraso. El proveedor de AzAPI es una capa fina sobre las API REST de Azure ARM, que, como Bicep, permite la compatibilidad inmediata con las nuevas características de Azure. Es importante tener en cuenta los requisitos de infraestructura de la organización y si son totalmente compatibles antes de tomar una decisión.
Comunidad y soporte técnico
La comunidad desempeña un papel clave para ayudar a aprender y superar los desafíos. Las comunidades de Terraform y Bicep ofrecen un alto nivel de compromiso y soporte técnico.
En el caso de la compatibilidad con Bicep, la ubicación en la que se va a obtener ayuda depende de la naturaleza del problema:
Para obtener soporte técnico de Terraform, la ubicación en la que se va a obtener ayuda depende de la naturaleza del problema:
Resumen
Bicep y Terraform son dos opciones principales de IaC que facilitan la configuración e implementación de recursos de Azure. Ambas ofrecen características fáciles de usar que ayudan a las organizaciones a aumentar la eficiencia y la productividad. Al evaluar la mejor opción para su organización, tenga en cuenta cuidadosamente sus requisitos y preferencias de infraestructura.