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 la infraestructura, este proceso se logra cada vez más con la infraestructura como código (IaC). Las herramientas de IaC van desde herramientas de uso general a 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, comparamos nueve características de integración e infraestructura de Bicep y Terraform. Comprender estas diferencias le ayuda a decidir qué herramienta mejor es compatible con la infraestructura y los procesos.
Estado y back-end
Terraform y 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 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, Terraform es probable que sea la mejor opción:
- Entornos de virtualización
- Escenarios multinube, 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 usa. Al ejecutar terraform init, el proveedor especificado se instala y se puede usar desde el código.
Las herramientas de la interfaz de la 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.
En procesamiento
Hay algunas diferencias importantes entre Bicep y Terraform en cuanto a la 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 preprocesamiento no implica llamadas a Azure, ya que usa state y HCL (HashiCorp Language) para determinar los cambios necesarios.
Autenticación
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 garantiza 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 sola configuración.
Integraciones de Azure
También debe tener en cuenta el uso de características de Azure como Azure Policy y cómo interactúan con otras herramientas y lenguajes. La validación preliminar de Bicep determina si un recurso no cumple una directiva para que se produzca 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 produce un error cuando se implementa un recurso que no se permite debido a la directiva.
Integración de portal
Una ventaja importante que Bicep tiene sobre Terraform es la capacidad de automatizar acciones del portal. Con Bicep, puede usar Azure Portal para exportar plantillas. La exportación de una plantilla le ayuda a comprender la sintaxis y las propiedades que implementan los recursos. Puede automatizar las implementaciones futuras empezando por la plantilla exportada y modificándola para satisfacer sus necesidades. Hasta que se admitan las plantillas de Terraform, debe traducir manualmente la plantilla exportada.
Aunque Terraform no proporciona las mismas integraciones del portal que Bicep, la infraestructura de Azure existente se puede tomar en administración de Terraform mediante Azure Export para Terraform. (Azure Export for Terraform es una herramienta de código abierto propiedad y mantenida por Microsoft en Repositorio de GitHub de Azure/aztfexport.
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 plantilla de ARM para evitar que esos cambios se sobrescriban en la siguiente implementación. Estos cambios no bloquean 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
Cloud Adoption Framework (CAF) es una colección de documentación, procedimientos recomendados y herramientas para acelerar la adopción de la nube en todo el 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 el mejor para su entorno, es importante tener en cuenta si va a implementar en más de una nube o si la infraestructura consta 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 utiliza sintaxis declarativa para simplificar la implementación de recursos de Azure.
En este artículo, comparamos 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 ahorra tiempo para desarrolladores. Ambas herramientas incorporan palabras clave y conceptos similares. Algunos de estos conceptos son la parametrización, la compatibilidad con proyectos de varios archivos y la 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 usa el lenguaje de configuración hashiCorp (HCL). El propósito principal de HCL es declarar recursos. Otras características del lenguaje sirven para que la definición de recursos sea más cómoda. Y, al igual que 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 las 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 el 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 la infraestructura de escalado 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 de ciclo de vida de las implementaciones de infraestructura típicas al elegir la mejor opción.
Bicep ofrece una operación hipotética 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. Después, es posible usar Azure PowerShell o la CLI de Azure con los archivos de Bicep para implementar los recursos en Azure. Azure PowerShell y la CLI de Azure no admiten la implementación de archivos de Bicep remotos. 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 plan de terraform es similar a la operación de Bicep what-if
. Con el terraform plan
comando , creará un plan de ejecución para obtener una vista previa antes de aplicarlo. A continuación, aplique el plan de ejecución mediante el comando terraform apply . Casi todo lo que haga con Terraform implica usar 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 se deben configurar los recursos de Azure. También se le guiará a través de las implementaciones de varios recursos de Azure para proporcionarle 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 disponibles para el editor que prefiera. Afortunadamente, Bicep y Terraform ofrecen recursos para mejorar la eficacia de 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 y la autocompletación de propiedades.
Para Terraform, la extensión de Visual Studio Code de Terraform 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 servicios estables de Azure. A veces, llegar a esta experiencia adaptada puede dar lugar a un retraso. El proveedor de AzAPI es una capa delgada sobre las API REST de Azure Resource Manager, que, como Bicep, permite la compatibilidad inmediata con las nuevas características de Azure. Es importante tener en cuenta los requisitos de infraestructura de su 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, donde vaya a obtener ayuda depende de la naturaleza del problema:
- Errores de documentación: para problemas con la documentación de Bicep en Microsoft Learn, cada artículo tiene una sección comentarios.
- Código fuente de Bicep y archivos de errores: visite el repositorio de GitHub de Microsoft Bicep para contribuir a los errores de archivo y producto de Bicep de código abierto.
Para obtener soporte técnico de Terraform, donde 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. Ambos 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, considere cuidadosamente sus requisitos y preferencias de infraestructura.