Pour obtenir une mise à l’échelle, les équipes DevOps recherchent toujours des moyens de déployer rapidement du code avec un processus fiable et reproductible. En ce qui concerne le cloud et l’infrastructure, ce processus s’effectue de plus en plus avec l’infrastructure en tant que code (IaC). Les outils IaC vont des outils à usage général aux outils destinés à des environnements spécifiques. Terraform est un exemple de l’ancien, tandis que Bicep est conçu pour gérer les tâches liées à Azure.
Dans cet article, nous comparons neuf fonctionnalités d’infrastructure et d’intégration de Bicep et Terraform. La compréhension de ces différences vous aide à déterminer l’outil qui prend le mieux en charge votre infrastructure et vos processus.
État et back-end
Terraform et Bicep sont à la fois une configuration d’état souhaité (DSC) qui facilite la gestion de l’infrastructure informatique et de développement en tant que code. Terraform stocke l’état de votre infrastructure managée et de votre configuration. Terraform utilise ces informations pour mapper les ressources réelles à votre configuration, suivre les métadonnées et améliorer les performances des infrastructures plus volumineuses. L’état est stocké dans un fichier local nommé terraform.tfstate
, mais peut également être stocké à distance. Il est essentiel de sauvegarder et de sécuriser vos fichiers d’état. Comme Terraform, Bicep est déclaratif et recherché par l’objectif. Toutefois, Bicep ne stocke pas l’état. Au lieu de cela, Bicep s’appuie sur le déploiement incrémentiel.
Cibles d’infrastructure
Lorsque vous comparez Bicep à Terraform pour la gestion de l’infrastructure cloud, il est important de prendre en compte votre environnement cloud cible :
- Azure uniquement
- Clouds multiples ou hybrides
Bicep est spécifique à Azure et n’est pas conçu pour fonctionner avec d’autres services cloud.
Si votre objectif est d’automatiser les déploiements dans l’un des environnements suivants, Terraform est probablement la meilleure option :
- Environnements de virtualisation
- Scénarios multiclouds, tels qu’Azure et d’autres clouds
- Charges de travail locales
Terraform interagit avec d’autres fournisseurs de cloud ou API à l’aide de plug-ins appelés fournisseurs. Il existe plusieurs fournisseurs Terraform Azure qui permettent la gestion de l’infrastructure Azure. Lors du codage d’une configuration Terraform, vous spécifiez les fournisseurs requis que vous utilisez. Lorsque vous exécutez terraform init, le fournisseur spécifié est installé et utilisable à partir de votre code.
Les outils CLI (Command Line Interface) jouent un rôle clé dans l’orchestration par le biais de l’implémentation et de la gestion de la technologie d’automatisation. Bicep et Terraform offrent des outils CLI.
Bicep s’intègre à Azure CLI, ce qui permet aux développeurs d’utiliser az
des commandes telles que :
L’interface CLI Terraform vous permet d’effectuer des tâches telles que valider et mettre en forme votre code Terraform, et créer et appliquer un plan d’exécution.
Bicep fournit également une fonctionnalité qui facilite l’intégration de Bicep à Azure Pipelines. Il existe une fonctionnalité similaire disponible pour Terraform, mais vous devez télécharger et installer l’extension Azure Pipelines Terraform Tasks pour Visual Studio. Une fois installé, vous pouvez exécuter des commandes Cli Terraform à partir d’Azure Pipelines. De plus, Terraform et Bicep prennent en charge GitHub Actions pour automatiser les builds logicielles, les tests et les déploiements.
Traitement
Il existe des différences importantes entre Bicep et Terraform en termes d’efficacité et d’optimisation des déploiements. Avec Bicep, le traitement se produit dans le côté principal du service d’infrastructure Azure. Cette fonctionnalité offre des avantages tels que le traitement préliminaire pour case activée stratégie ou la disponibilité pour le déploiement de plusieurs instances dans une région. Avec Terraform, le traitement est effectué dans le client Terraform. Par conséquent, le prétraitement n’implique aucun appel à Azure, car il utilise l’état et le HCL (HashiCorp Language) pour déterminer les modifications requises.
Authentification
Les fonctionnalités d’authentification Azure varient entre Bicep et Terraform. Avec Bicep, un jeton d’autorisation est fourni pendant la demande d’envoi d’un fichier Bicep et d’un modèle ARM. ARM garantit que vous êtes autorisé à créer le déploiement et à déployer des ressources dans le modèle spécifié. Terraform authentifie chaque API en fonction des informations d’identification du fournisseur, telles qu’Azure CLI, le principal de service ou les identités managées pour les ressources Azure. De plus, plusieurs informations d’identification du fournisseur peuvent être utilisées dans une configuration unique.
Intégrations Azure
Vous devez également envisager votre utilisation des fonctionnalités Azure telles qu’Azure Policy et la façon dont chacune interagit avec d’autres outils et langages. La validation préliminaire de Bicep détermine si une ressource ne se conforme pas à une stratégie afin qu’elle échoue avant un déploiement. Par conséquent, les développeurs peuvent corriger les ressources avec une stratégie à l’aide de modèles ARM fournis. Le modèle ARM peut être utilisé pour créer une affectation de stratégie à une autre ressource pour la correction automatisée. Terraform échoue toutefois lorsqu’une ressource est déployée qui n’est pas autorisée en raison d’une stratégie.
Intégration au portail
L’un des principaux avantages que Bicep a sur Terraform est la possibilité d’automatiser les actions du portail. Avec Bicep, vous pouvez utiliser la Portail Azure pour exporter des modèles. L’exportation d’un modèle vous aide à comprendre la syntaxe et les propriétés qui déploient vos ressources. Vous pouvez automatiser les déploiements futurs en commençant par le modèle exporté et en le modifiant pour répondre à vos besoins. Tant que les modèles Terraform ne sont pas pris en charge, vous devez traduire le modèle exporté manuellement.
Bien que Terraform ne fournisse pas les mêmes intégrations de portail que Bicep, l’infrastructure Azure existante peut être prise sous gestion Terraform à l’aide d’Azure Export pour Terraform. (Azure Export pour Terraform est un outil open source détenu et géré par Microsoft sur le site Dépôt GitHub Azure/aztfexport.)
Modifications hors bande
Les modifications de configuration hors bande sont apportées à une configuration d’appareil en dehors du contexte de l’outil. Par exemple, supposons que vous déployez un groupe de machines virtuelles identiques à l’aide de Bicep ou Terraform. Si vous modifiez ce groupe de machines virtuelles identiques à l’aide du portail, la modification est « hors bande » et inconnue de votre outil IaC.
Si vous utilisez Bicep, les modifications hors bande doivent être rapprochées de Bicep et du code de modèle ARM pour éviter que ces modifications soient remplacées lors du prochain déploiement. Ces modifications ne bloquent pas le déploiement.
Si vous utilisez Terraform, vous devez importer les modifications hors bande dans l’état Terraform et mettre à jour la liste HCL.
Par conséquent, si un environnement implique des changements fréquents hors bande, Bicep est plus convivial. Lorsque vous utilisez Terraform, vous devez réduire les modifications hors bande.
Frameworks cloud
Le Framework d’adoption du cloud (CAF) est une collection de documentation, de bonnes pratiques et d’outils pour accélérer l’adoption du cloud tout au long de votre parcours cloud. Azure fournit des services natifs pour le déploiement de zones d’atterrissage. Bicep simplifie ce processus avec une expérience de portail basée sur les modèles ARM et l’implémentation de zone d’atterrissage. Terraform utilise un module Zones d’atterrissage à l’échelle de l’entreprise pour déployer, gérer et opérationnaliser avec Azure.
Résumé
Bicep et Terraform offrent de nombreuses fonctionnalités d’intégration et d’infrastructure conviviales. Ces fonctionnalités facilitent l’implémentation et la gestion de la technologie d’automatisation. Lorsque vous décidez de ce qui convient le mieux à votre environnement, il est important de prendre en compte si vous effectuez un déploiement sur plusieurs clouds ou si votre infrastructure se compose d’un environnement multicloud ou hybride. En outre, veillez à prendre en compte les neuf fonctionnalités présentées dans cet article pour faire le meilleur choix pour votre organisation.
Les organisations d’aujourd’hui sont confrontées à des défis dynamiques qui nécessitent beaucoup de flexibilité et d’agilité. Les environnements de cloud public répondent à ces besoins via l’automatisation, en particulier via l’infrastructure en tant que code (IaC). Deux options IaC principales sont Hashicorp Terraform et Bicep. Terraform est un outil open source qui aide les professionnels devOps à gérer les services locaux et cloud à l’aide de code déclaratif. Microsoft Bicep utilise la syntaxe déclarative pour simplifier le déploiement des ressources Azure.
Dans cet article, nous comparons plusieurs fonctionnalités clés de l’expérience utilisateur pour identifier les similitudes et les différences entre Terraform et Bicep.
Syntaxe linguistique
Bicep et Terraform sont des langages spécifiques au domaine (DSL) faciles à utiliser et à gagner du temps pour les développeurs. Les deux outils incorporent des concepts et des mot clé similaires. Certains de ces concepts sont paramétrables, la prise en charge des projets multi-fichiers et la prise en charge des modules externes. Terraform offre toutefois une bibliothèque plus riche de fonctionnalités intégrées pour certaines tâches. Décider entre les deux est une question de préférence et d’expérience. Voici quelques-unes des brèves présentations et certaines des fonctionnalités conviviales proposées par chaque syntaxe de langage.
Bicep est un langage déclaratif. Par conséquent, l’ordre dans lequel les éléments sont définis dans le code n’affecte pas la façon dont le déploiement est traité. L’étendue cible par défaut de Bicep est la resourceGroup
. Les utilisateurs peuvent utiliser des variables pour encapsuler des expressions complexes et rendre les fichiers Bicep plus lisibles. Le concept de modules permet la réutilisation du code Bicep entre les projets ou les équipes.
Terraform est également un langage déclaratif qui utilise le langage HCL (HashiCorp Configuration Language). L’objectif principal de HCL est de déclarer des ressources. D’autres fonctionnalités linguistiques permettent de définir des ressources plus facilement. Et comme Bicep, l’ordre du code dans les fichiers de configuration Terraform n’est pas significatif.
Helpers linguistiques
Bicep et Terraform fournissent des assistances linguistiques pour simplifier les tâches de codage. Étant donné que les deux sont conviviaux, le choix dépend en grande partie des préférences et des exigences.
Bicep prend en charge les expressions pour rendre votre code plus dynamique et plus flexible. Différents types de fonctions peuvent être utilisés dans un fichier Bicep. Certains de ces types de fonctions sont des fonctions logiques, numériques et d’objection. Les boucles peuvent définir plusieurs copies d’une ressource, d’un module, d’une propriété, d’une variable ou d’une sortie. Les boucles permettent d’éviter la répétition de la syntaxe dans un fichier Bicep.
Terraform offre également des fonctions intégrées appelées à partir d’expressions pour transformer et combiner des valeurs. Comme Bicep, les expressions Terraform peuvent inclure des expressions complexes telles que des références aux données exportées par les ressources et l’évaluation conditionnelle. Les boucles peuvent gérer des collections et peuvent produire plusieurs instances d’une ressource sans avoir à répéter le code.
Modules
Bicep et Terraform prennent en charge le concept de modules. Les modules vous permettent de créer des composants réutilisables à partir de votre code. Les modules jouent un rôle clé dans la mise à l’échelle de l’infrastructure et conservent les propre de configuration. Étant donné que les modules encapsulent des groupes de ressources, ils réduisent la quantité de code qui doit être développée pour des composants d’infrastructure similaires. Bien que les modules fonctionnent de la même façon dans Bicep et Terraform, ils varient en implémentation.
Dans Bicep, un module est simplement un fichier Bicep déployé à partir d’un autre fichier Bicep. Les modules Bicep servent à améliorer la lisibilité des fichiers Bicep. Ces modules sont également évolutifs. Les utilisateurs peuvent partager des modules entre les équipes pour éviter la duplication du code et réduire les erreurs. Pour plus d’informations sur la définition d’un module Bicep, consultez les modules Bicep.
Dans Terraform, les modules constituent le principal moyen d’empaqueter et de réutiliser des configurations de ressources entre les équipes. Les modules Terraform sont des conteneurs pour plusieurs ressources qui sont empaquetées en tant qu’unité logique unique. Un module se compose d’une collection de .tf
fichiers et/ou .tf.json
stockés ensemble dans un répertoire. En plus des modules du système de fichiers local, Terraform peut également charger des modules à partir de différentes sources. Ces sources incluent le registre, le chemin local, les modules et GitHub.
Cycle de vie d’approvisionnement
Terraform et Bicep permettent aux développeurs de valider une configuration avant le déploiement, puis d’appliquer les modifications. Terraform offre une plus grande flexibilité pour détruire tous les objets distants gérés par une configuration particulière. Cette fonctionnalité est utile pour propre des objets temporaires une fois votre travail terminé. Il est essentiel de prendre en compte les exigences de cycle de vie des déploiements d’infrastructure classiques lors du choix de la meilleure option.
Bicep offre une opération de simulation qui vous permet d’afficher un aperçu des modifications avant de déployer un fichier Bicep. Azure Resource Manager fournit l’opération what-if
et n’apporte aucune modification aux ressources existantes. Il est ensuite possible d’utiliser Azure PowerShell ou Azure CLI avec vos fichiers Bicep pour déployer vos ressources sur Azure. Azure PowerShell et Azure CLI ne prennent pas en charge le déploiement de fichiers Bicep distants. Toutefois, vous pouvez utiliser l’interface CLI Bicep pour générer votre fichier Bicep dans un modèle JSON, puis charger le fichier JSON à un emplacement distant.
Dans Terraform, la commande de plan terraform est similaire à l’opération Bicep what-if
. Avec la terraform plan
commande, vous créez un plan d’exécution pour afficher un aperçu avant de l’appliquer. Vous appliquez ensuite le plan d’exécution via la commande terraform apply . Presque tout ce que vous faites avec Terraform implique d’utiliser à la fois les commandes et terraform apply
les terraform plan
commandes.
Bien démarrer
Bicep et Terraform offrent toutes deux des ressources pour vous aider à commencer. Le module Learn pour Bicep vous aide à définir la façon dont vos ressources Azure doivent être configurées. Vous êtes également guidé dans les déploiements de plusieurs ressources Azure pour vous offrir une expérience pratique.
De même, HashiCorp Learn fournit aux utilisateurs différentes ressources de formation Terraform pour vous apprendre à installer et à utiliser Terraform. Ces ressources incluent des informations montrant comment utiliser Terraform pour approvisionner l’infrastructure sur Azure.
Création de code
L’expérience de création de code dépend du nombre de compléments disponibles pour votre éditeur de choix. Heureusement, Bicep et Terraform offrent des ressources pour améliorer l’efficacité de la création de code.
Pour Bicep, l’un des compléments les plus efficaces est l’extension Bicep Visual Studio Code. L’extension fournit des fonctionnalités telles que la validation du code, IntelliSense, l’accès aux propriétés dot et la saisie automatique des propriétés.
Pour Terraform, l’extension Terraform Visual Studio Code avec le serveur de langage Terraform offre de nombreuses fonctionnalités identiques à l’extension Bicep Visual Studio Code. Par exemple, l’extension prend également en charge la mise en surbrillance de la syntaxe, IntelliSense, la navigation dans le code et l’Explorateur de modules. HashiCorp propose également des [instructions d’installation détaillées] sur son dépôt GitHub (https://github.com/hashicorp/terraform-ls/blob/main/docs/USAGE.md) pour la configuration et l’utilisation du serveur de langage Terraform.
Couverture Azure
Bicep présente un avantage par rapport à Terraform quand il s’agit de configurer des ressources Azure. Bicep est profondément intégré aux services Azure. De plus, il offre une prise en charge immédiate des nouvelles fonctionnalités Azure. Terraform fournit deux fournisseurs qui permettent aux utilisateurs de gérer Azure : AzureRM et AzAPI. Le fournisseur AzureRM offre une expérience entièrement personnalisée pour les services Azure stables. Parfois, l’obtention de cette expérience personnalisée peut entraîner un peu de retard. Le fournisseur AzAPI est une couche mince sur les API REST Azure Resource Manager, qui, comme Bicep, permet une prise en charge immédiate des nouvelles fonctionnalités Azure. Il est important de prendre en compte les exigences d’infrastructure de votre organisation et de déterminer s’ils sont entièrement pris en charge avant de prendre une décision.
Communauté et Support
La communauté joue un rôle clé dans l’aide à apprendre et à surmonter les défis. Les communautés Terraform et Bicep offrent un niveau élevé d’engagement et de soutien.
Pour le support Bicep, où vous allez pour obtenir de l’aide dépend de la nature du problème :
- Bogues de documentation : Pour les problèmes liés à la documentation Bicep sur Microsoft Learn, chaque article comporte une section Commentaires.
- Code source Bicep et bogues de classement : visitez le dépôt GitHub Microsoft Bicep pour contribuer aux bogues de produit et de fichier Bicep open source.
Pour le support Terraform, où vous accédez pour obtenir de l’aide dépend de la nature du problème :
Bogues de documentation : Pour les problèmes liés à la documentation Terraform sur Microsoft Learn, chaque article comporte une section Commentaires.
Code source du fournisseur et bogues de classement : Microsoft dispose de dépôts GitHub où vous pouvez enregistrer des bogues et contribuer aux fournisseurs Terraform Azure open source. Pour répertorier les fournisseurs disponibles, accédez à l’organisation Azure GitHub et entrez terraform-provider-
dans le champ Rechercher un référentiel...
Questions fondamentales sur Terraform : visitez la section Terraform du portail de la communauté HashiCorp.
Questions relatives aux fournisseurs Terraform : visitez la section Fournisseurs Terraform du portail de la communauté HashiCorp.
Résumé
Bicep et Terraform sont deux principales options IaC qui facilitent la configuration et le déploiement des ressources Azure. Les deux offrent des fonctionnalités conviviales qui aident les organisations à améliorer l’efficacité et la productivité. Lorsque vous évaluez la meilleure adéquation pour votre organisation, tenez soigneusement compte des besoins et des préférences de votre infrastructure.