Qu'est-ce que Terraform et quelles sont ses caractéristiques ?
Terraform (TF) est un outil qui permet de construire, modifier et versionner une infrastructure (Infrastructure as Code). Selon ses développeurs, la technologie n'est pas une « plateforme agnostique », mais elle permet d'utiliser plusieurs providers dans un même template de configuration. Il existe des plug-ins pour des providers de Cloud, des services d'hébergement, des SCM… Concrètement, Terraform permet de créer automatiquement son infrastructure, comme des machines virtuelles, des lambdas Amazon Web Services (AWS)… le tout, simplement, en trois étapes (write, plan et create).
Il a été développé par HashiCorp, la société à l'origine de plusieurs autres outils populaires, tels que Consul, Vagrant, Vault, Atlas, Packer et Nomad. Sa première sortie en juillet 2014 et il permet de provisionner et d'adapter l'infrastructure virtuelle sur tous les principaux fournisseurs de cloud. C'est un outil open source, écrit en Go, avec une communauté active de plus de 1200 contributeurs, et qui repose sur une architecture basée sur les plug-ins. Selon l'entreprise californienne, Terraform peut gérer des fournisseurs de services existants et populaires ainsi que des solutions internes personnalisées.
Les fichiers de configuration indiquent à Terraform les composants nécessaires à l'exécution d'une seule application ou de l'ensemble de votre centre de données. Il génère un plan d'exécution décrivant ce qu'il fera pour atteindre l'état souhaité, puis l'exécute pour construire l'infrastructure décrite. Sa documentation indique que, lorsque votre configuration change, Terraform est capable de déterminer ce qui a changé et de créer des plans d'exécution incrémentiels qui peuvent être appliqués. L'infrastructure que Terraform peut gérer comprend des composants de bas niveau tels que les instances de calcul, le stockage et le réseau.
Il peut gérer également des composants de haut niveau tels que les entrées DNS, les fonctionnalités SaaS, etc. L'infrastructure est décrite à l'aide d'une syntaxe de configuration de haut niveau. Cela permet de créer un modèle de votre centre de données qui peut être versionné et traité comme n'importe quel autre code. L'équipe de Terraform a publié la version 0.15 de l'outil en avril dernier avec des fonctionnalités comme : compatibilité des sources de données d'état à distance, stabilité du format de fichier State, prise en charge de la console unifiée, et bien d'autres encore. Quelques versions mineures ont suivi en mai.
Disponibilité de la première version stable de Terraform
L'équipe a publié cette semaine la première version stable de l'outil, Terraform 1.0. « Aujourd'hui, à l'occasion de HashiConf Europe, nous avons le plaisir d'annoncer la disponibilité générale de HashiCorp Terraform 1.0, une étape importante pour l'interopérabilité, la facilité des mises à niveau et la maintenance de vos flux de travail d'automatisation. Terraform 1.0 est immédiatement disponible en téléchargement ainsi que pour une utilisation dans le nuage Terraform d'HashiCorp », a déclaré l'équipe dans un billet de blogue sur son site Web, ajoutant que de nombreuses organisations utilisent déjà l'outil.
« Terraform d'HashiCorp est déjà largement utilisé par des individus et des équipes dans des entreprises de toutes tailles comme norme pour le provisionnement et l'automatisation multicloud », a-t-elle ajouté. Selon l'équipe, Terraform 1.0 ne comporte intentionnellement aucun changement significatif par rapport à Terraform 0.15.5. Vous pouvez considérer la branche 1.0 comme une continuation directe de la série 0.15. « Nous n'avons pas l'intention de publier d'autres versions dans la série v0.15, car toutes les versions v1.0 ne seront que des mises à jour mineures pour corriger des bogues », a-t-elle déclaré.
D'après son communiqué, pour toutes les futures versions mineures avec la version majeure 1, elle a l'intention de préserver la rétrocompatibilité comme cela est décrit en détail dans les promesses de compatibilité de Terraform v1.0. La dernière version de Terraform v1.1.0 sera donc la première version mineure avec de nouvelles fonctionnalités qu'elle implémentera en tenant compte de ces promesses. Voici les points forts de cette première version stable.
L'interopérabilité accrue du format de fichier State
Selon l'équipe, Terraform a fait d'énormes progrès en matière d'interopérabilité. Le format de fichier State est désormais compatible entre les versions 0.14.x, 0.15.x et 1.0.x. La compatibilité des sources de données à distance de State est maintenant rétrocompatible avec les versions 0.12.30, 0.13.6, 0.14.0, 0.15.0 et 1.0.x. Elle estime que ces améliorations ajoutent de la souplesse aux flux de travail lorsque vous passez d'une version de Terraform à une autre.
Amélioration de l'expérience de mise à niveau
L'équipe a déclaré qu'à partir de Terraform 0.15 et tout au long du cycle de vie de la version 1.x, vous pouvez désormais passer à une nouvelle version de Terraform et vos flux de travail resteront opérationnels, comme ils l'étaient dans les versions précédentes. Selon le billet de blogue de l'équipe, l'utilisation de Terraform 1.x ne nécessite pas d'outils de mise à niveau, de refactoring ou d'autres changements.
Périodes de maintenance prolongées
L'équipe a déclaré que toutes les versions de Terraform 1.x auront une période de maintenance d'au moins 18 mois. Cela signifie qu'HashiCorp continuera à rechercher les bogues et à publier des fonctionnalités pour la version 1.0 pendant au moins cette période. Ces correctifs peuvent être publiés dans des versions 1.x ultérieures et pas nécessairement dans des versions 1.0.x incrémentielles.
Fin de vie de Terraform Plugin SDK v1
Terraform Plugin SDK est un framework qui permet aux développeurs de créer et de maintenir des fournisseurs Terraform. L'équipe a annoncé que l'entreprise mettra fin à la prise en charge de la version 1 de Terraform Plugin SDK le 31 juillet 2021. Les utilisateurs de Terraform CLI et de Terraform Cloud ne sont pas concernés par cette décision et n'ont pas besoin de prendre de mesures. Cependant, les mainteneurs de fournisseurs Terraform qui sont concernés sont encouragés à utiliser le guide de mise à niveau pour passer à la version 2 de Terraform Plugin SDK.
Le marché des outils d'IaC est en forte croissance
L'IaC est le processus de configuration et de gestion de l'infrastructure par le biais d'un modèle descriptif. Il s'agit de traiter la configuration et le provisionnement de votre infrastructure de la même manière que vous traitez le code source de votre application. Les modules de configuration sont généralement stockés dans des systèmes de contrôle de version dans des formats de code très bien documentés, ce qui permet d'obtenir une plus grande précision, de réduire les erreurs et d'augmenter la vitesse et la cohérence. C'est l'une des plus importantes pratiques DevOps utilisées en conjonction avec la livraison continue.
Les avantages qui poussent de nombreuses entreprises à migrer vers l'IaC sont une infrastructure immuable, une augmentation de la vitesse de livraison, l'évolutivité, les économies de coûts, mais également la réduction des risques. Il permet aux équipes DevOps d'utiliser différents outils et approches pour contrôler et personnaliser automatiquement l'infrastructure requise, au lieu de configurer manuellement les serveurs et les systèmes d'exploitation. Avec l'augmentation du nombre de cycles de production et de livraison, l'utilisation des outils d'IaC a changé la façon dont les ingénieurs logiciels conçoivent, testent et publient leurs applications.
Les outils d'automatisation qui favorisent les meilleures pratiques IaC sont nécessaires pour rendre le processus de construction et de configuration de l'infrastructure plus compétitif et efficace, en réduisant les coûts et les efforts impliqués. Terraform est l'un des outils les plus remarquables sur le marché, mais l'on estime qu'il est encore jeune et ferait encore face à certains problèmes. « Mon problème avec l'approche de Terraform est qu'il est encore au stade d'infrastructure en tant que données et non d'infrastructure en tant que code », a écrit une critique à propos du modèle de Terraform.
« Déplacer les données d'infrastructure dans des fichiers plats n'est pas une victoire évidente par rapport au fait de les avoir dans une base de données. Vous obtenez un contrôle de version plus facile avec des outils externes comme git, mais vous avez tout ce qui fait qu'une base de données est un plaisir de travailler avec au lieu de fichiers plats, comme la validation de schéma et les requêtes faciles, etc. Des choses comme for_each et les variables existent parce que "l'infrastructure en tant que données" serait incroyablement fastidieuse, fragile et difficile à étendre », explique un autre.
De ce fait, ils proposent d'utiliser les alternatives à Terraform, comme Pulumi, Ansible, Serverless, AWS CloudFormation, GeoEngineer, etc. Voici ci-dessous quelques outils d'IaC qui se sont fait une place remarquable sur le marché.
Ansible
Ansible a été développé par RedHat avec l'idée de promouvoir la simplicité. Il contribue à la modernisation de l'informatique et aide les équipes DevOps à réaliser des déploiements d'applications plus rapides, plus fiables et mieux coordonnés. Vous pouvez facilement établir plusieurs environnements identiques avec des bases de sécurité sans avoir à vous soucier du respect des exigences de conformité. En ce qui concerne les entreprises, Ansible apporte un avantage concurrentiel en donnant du temps pour introduire l'innovation et la stratégie au sein de l'organisation et aligner l'informatique sur les besoins de l'entreprise.
Ansible est considéré comme le moyen le plus simple d'automatiser la fourniture, la configuration et la gestion des applications et de l'infrastructure informatique. Ansible permet aux utilisateurs d'exécuter des playbooks pour créer et gérer les ressources d'infrastructure requises. Il n'utilise pas d'agents et peut se connecter aux serveurs et exécuter des commandes via SSH. Son code est écrit en YAML sous forme de Playbooks Ansible, ce qui facilite la compréhension et le déploiement des configurations. Vous pouvez étendre les fonctionnalités d'Ansible en écrivant vos propres modules et plug-ins Ansible.
AWS CloudFormation
AWS CloudFormation est un outil d'IaC intégré à la plateforme cloud AWS qui vous permet de provisionner et gérer rapidement et efficacement une collection de ressources AWS ou tierces liées. Il vous permet de mettre en œuvre toutes les meilleures pratiques requises de DevOps et GitOps. Avec CloudFormation, vous pouvez gérer la mise à l'échelle de vos ressources et même automatiser la gestion des ressources en intégrant CloudFormation à d'autres ressources AWS requises.
En outre, AWS CloudFormation vous permet également d'utiliser son CLI open source pour créer vos propres fournisseurs de ressources afin d'approvisionner et de gérer les ressources d'applications tierces avec les ressources AWS natives. Les modèles et les gabarits de CloudFormation sont écrits au format YAML ou JSON. Il vous suffit de coder votre infrastructure souhaitée à partir de zéro avec le langage de modèle approprié et d'utiliser AWS CloudFormation pour approvisionner et gérer la pile et les ressources que vous avez définies dans le modèle.
Azure Resource Manager
Azure Resource Manager est le service fourni pour le déploiement et la gestion des ressources Azure. Il s'agit d'un outil d'IaC spécifique à Azure qui permet de déployer, de maintenir et de suivre les ressources en une seule action collective plutôt qu'individuellement. Il intègre nativement le contrôle d'accès basé sur les rôles (RBAC) dans le mécanisme de gestion des ressources pour permettre aux utilisateurs d'appliquer un contrôle d'accès à toutes les ressources au sein d'une catégorie de ressources. Le gestionnaire de ressources vous permet d'utiliser des modèles déclaratifs plutôt que des scripts pour gérer votre infrastructure.
Google Cloud Deployment Manager
Google Cloud Deployment Manager est un service de déploiement d'infrastructure fourni par GCP pour automatiser la création, la configuration, le provisionnement et la gestion des ressources sur Google Cloud Platform. Vous pouvez facilement créer un ensemble de ressources Google Cloud, puis les gérer de manière pratique comme une seule unité. À l'aide de YAML ou de Python, vous pouvez construire des modèles, prévisualiser les modifications qui seront apportées avant le déploiement et visualiser vos déploiements dans une interface utilisateur de type console.
Cet outil d'IaC utilise une approche de langage déclaratif pour spécifier ce que la configuration est censée être et laisser le système s'occuper du reste. Google Cloud Deployment Manager permet de déployer simultanément de nombreuses ressources, de contrôler l'ordre de création des ressources et de créer également des dépendances de définition des ressources. Les configurations de déploiement sont traitées comme du code et ces déploiements peuvent facilement être répétés à l'infini en maintenant la cohérence de leur état.
Pulumi
Pulumi est une plateforme open source d'infrastructure-as-code (IaC) qui permet aux entreprises d'automatiser la gestion de leurs environnements en nuage. erraform et Pulumi présentent de nombreuses similitudes, mais ils diffèrent sur quelques points essentiels. Tout d'abord, Pulumi est comme Terraform, en ce sens que vous créez, déployez et gérez l'infrastructure en tant que code sur n'importe quel cloud. Mais là où Terraform nécessite l'utilisation d'un langage de programmation personnalisé, le HCL, Pulumi vous permet d'utiliser des outils et des langages généraux familiers pour atteindre les mêmes objectifs.
Comme Terraform, Pulumi est open source et son utilisation est gratuite. Terraform et Pulumi prennent tous deux en charge de nombreux fournisseurs de cloud computing, notamment AWS, Azure et Google Cloud, ainsi que d'autres services tels que CloudFlare, Digital Ocean, etc. Les principales différences entre Terraform et Pulumi sont les suivantes :
- Terraform exige que vous et votre équipe appreniez un nouveau langage personnalisé, le HCL. En revanche, Pulumi vous permet d'utiliser des langages que vous connaissez et aimez déjà, comme Python, Go, JavaScript, TypeScript et C# ;
- Terraform, par défaut, exige que vous gériez manuellement la concurrence et l'état, par le biais de ses "fichiers d'état". Pulumi, en revanche, utilise le service gratuit app.pulumi.com pour éliminer ces problèmes ;
- Pulumi offre une prise en charge approfondie des technologies natives du cloud, comme Kubernetes, et prend en charge des scénarios de déploiement avancés qui ne peuvent être exprimés avec Terraform.
Chef
Chef est un outil compté parmi les outils d'IaC les plus remarquables du secteur. Chef utilise un langage de style procédural dans lequel l'utilisateur doit écrire le code et spécifier étape par étape la manière d'atteindre l'état souhaité. Il dépend de l'utilisateur pour la détermination d'un processus de déploiement optimal. Grâce son DSL basé sur Ruby, Chef vous permet de créer des recettes et des livres de cuisine. Ces recettes et livres de recettes spécifient les étapes exactes requises pour obtenir la configuration souhaitée de vos applications et utilitaires sur les serveurs existants.
Cet outil de gestion d'infrastructure se concentre fortement sur le déploiement et la modélisation d'un processus d'automatisation d'infrastructure évolutif et sécurisé dans tout environnement souhaité. Avec Chef, les équipes DevOps peuvent facilement approvisionner et déployer une infrastructure à la demande. Chef est l'une des solutions de gestion de configuration couramment utilisées par les entreprises dans leurs processus d'intégration et de livraison continues.
Puppet
Puppet est un autre outil de gestion de configuration open source qui est le plus souvent utilisé pour tirer les ficelles d'un certain nombre de serveurs d'application à la fois. Il utilise également un DSL basé sur Ruby, comme Chef, où vous pouvez décrire l'état final souhaité de votre infrastructure. La principale différence entre Puppet et Chef est que le premier utilise une approche déclarative, où il vous suffit de décider à quoi ressemblent les configurations que vous souhaitez, puis Puppet trouve comment y parvenir. Puppet fait référence à un ensemble d'outils d'IaC qui sont utilisés pour fournir vos infrastructures rapidement et à une échelle sécurisée.
Puppet s'intègre à la quasi-totalité des principaux fournisseurs de plateformes de cloud Infrastructure as Code, tels que AWS, Azure, Google Cloud et VMware, ce qui permet une automatisation multiple du cloud.
Sources : Terraform 1.0, Page GitHub de Terraform
Et vous ?
Que pensez-vous de Terraform ? En quoi le jugez-vous excellent ou moins efficace ?
Utilisez-vous Terraform ou l'une de ces alternatives ? Quelles sont les raisons de votre choix ?
Voir aussi
Terraform 0.15 est disponible, l'environnement d'Infrastructure as code vient avec un large éventail de fonctionnalités stables, et marque le début de la période de préversion menant à Terraform 1.0
Pulumi publie Pulumi 3.0, la troisième version majeure de sa plateforme d'infrastructure en tant que code, qui prend en charge Google Cloud en tant que fournisseur natif d'infrastructure
Tutoriel pour découvrir Terraform, un outil qui permet de gérer son infrastructure par le code (Infrastructure as Code)
Ansible 4.0.0 est disponible, l'outil d'automatisation multiplateforme est basé sur Ansible Core 2.11. Certains changements ne sont pas rétrocompatibles avec le langage principal des playbooks