Présentation
Ansible® et HashiCorp Terraform sont deux outils Open Source qui permettent d'automatiser les environnements informatiques selon une approche de type IaC (Infrastructure-as-Code, ou infrastructure en tant que code). S'iIs jouent tous deux un rôle essentiel dans la gestion de l'infrastructure, ces outils répondent toutefois à différents besoins dans le cycle de vie de l'automatisation.
Terraform est un outil IaC conçu pour créer, modifier et gérer l'infrastructure de manière sécurisée et reproductible. Ansible est un moteur d'automatisation polyvalent qui sert à configurer les systèmes, à déployer les logiciels et à orchestrer les tâches complexes pour l'ensemble des serveurs, des périphériques réseau, des outils de sécurité et des environnements hybrides. À l'heure actuelle, les stratégies d'automatisation les plus efficaces associent ces deux outils pour assurer la gestion complète du cycle de vie de l'infrastructure.
Souvent, les grandes entreprises qui utilisent l'outil Ansible Open Source de base migrent ensuite vers la solution Red Hat® Ansible Automation Platform pour gérer et faire évoluer leur stratégie d'automatisation. Cette plateforme comprend des fonctions d'entreprise, telles que la gouvernance centralisée, Automation Analytics et un service d'assistance officiel. Pour développer une stratégie d'automatisation de bout en bout, les équipes doivent maîtriser les avantages de Terraform pour le provisionnement de l'infrastructure, ainsi que les fonctionnalités de configuration que propose Ansible et les outils de mise à l'échelle des processus automatisés qu'offre Ansible Automation Platform.
Définition de l'IaC
Avant, le provisionnement de nouveaux environnements informatiques exigeait beaucoup de temps, d'argent et de processus manuels. Avec l'essor de la virtualisation, des conteneurs et du cloud computing, le nombre et la fréquence des modifications au sein de l'infrastructure ont augmenté, rendant cette approche manuelle insoutenable.
C'est là que l'IaC est entrée en jeu.
L'approche IaC consiste à gérer et provisionner l'infrastructure informatique avec du code lisible par une machine plutôt qu'avec des configurations manuelles ou des manipulations du matériel.
L'adoption de l'IaC redéfinit la collaboration entre les équipes de développement et d'exploitation. Au lieu d'utiliser des scripts ad hoc ou de régler les paramètres manuellement sur une console cloud, elles peuvent créer des fichiers de configuration qui contiennent toutes les caractéristiques de l'infrastructure. Cette approche leur permet ainsi de provisionner plusieurs fois le même environnement de manière cohérente, quel que soit le stade du cycle de vie. Parce qu'elle codifie et documente l'infrastructure dans des fichiers modifiables, partageables et versionnés, l'IaC contribue à éliminer les erreurs, à accélérer les déploiements, ainsi qu'à éviter les écarts de configuration dus aux modifications non consignées.
L'IaC forme la base des stratégies DevOps et cloud modernes. Comme cette méthode définit l'infrastructure au moyen de code exécuté automatiquement, il faut des outils spécialisés pour convertir ces fichiers en une infrastructure fonctionnelle. Les solutions Ansible, Red Hat Ansible Automation Platform et Terraform aident à appliquer les pratiques d'IaC plus rapidement et plus efficacement : Terraform cible la création de l'infrastructure, tandis qu'Ansible se concentre sur la configuration des éléments exécutés.
Ressources Red Hat
Points communs entre Ansible et Terraform
Même s'ils interviennent à différents stades du cycle de vie de l'automatisation, les outils Ansible et Terraform partagent des similarités clés.
Conception sans agent
Ansible et Terraform présentent une architecture moderne et simplifiée, plus facile à exécuter que les anciens systèmes d'automatisation. Sans agent, ces outils ne nécessitent pas l'installation de logiciels spéciaux ni d'agents permanents sur les serveurs ou les ressources qu'ils gèrent, ce qui simplifie considérablement leur configuration. Terraform communique principalement par l'intermédiaire des API des fournisseurs de services cloud. Ansible utilise des protocoles standards, comme SSH (Secure Shell), pour exécuter les tâches, ainsi que des API pour communiquer avec les nœuds gérés.
Écosystème Open Source et communautaire
Ansible et Terraform sont des projets Open Source de base qui réunissent de nombreux utilisateurs actifs. Cet écosystème communautaire met à disposition de vastes bibliothèques de contenus prêts à l'emploi. Grâce à ses milliers de contributeurs, Terraform peut interagir avec la plupart des clouds publics et des plateformes. De même, Ansible offre des modules et des playbooks pour presque tous les types de tâches de configuration. Les équipes peuvent ainsi trouver des solutions ou bénéficier de l'aide de pairs rapidement, quel que soit l'outil qu'elles utilisent.
Principes d'automatisation complémentaires
Les deux outils visent à automatiser l'infrastructure. Malgré leur spécialisation, ils partagent certaines fonctions. Par exemple, il est également possible de provisionner un environnement avec Ansible et d'exécuter des scripts de configuration de base avec Terraform. Tous deux servent le même objectif : transformer les processus informatiques manuels et sujets aux erreurs en code cohérent et reproductible. Ensemble, ils permettent ainsi d'automatiser l'ensemble du workflow.
Découvrez comment automatiser les déploiements d'applications, optimiser l'infrastructure, ainsi qu'assurer la continuité des mises à jour et de la résolution des problèmes avec Ansible et Terraform (durée de la vidéo : 2 min 46 s)
Différences entre Ansible et Terraform
Même s'ils s'appuient tous les deux sur l'approche IaC, ces deux outils ont chacun leur propre fonctionnement. Pour les intégrer et choisir celui qui sera le plus adapté à une tâche, il est nécessaire de comprendre leurs différences.
Fonctionnement déclaratif et procédural
La principale différence entre ces deux outils réside dans le format des instructions qu'ils reçoivent :
- Terraform utilise le langage de configuration déclaratif HCL (HashiCorp Configuration Language). L'utilisateur définit l'état final souhaité, c'est-à-dire le type d'infrastructure qu'il recherche, puis le moteur de Terraform détermine automatiquement les étapes nécessaires pour atteindre cet état, en gérant toutes les dépendances.
- Ansible repose sur une approche de l'automatisation majoritairement procédurale (ou impérative). L'outil utilise des playbooks en langage YAML, lisible par un humain. L'utilisateur définit des instructions explicites, étape par étape, pour obtenir le résultat souhaité. Il peut ainsi contrôler avec précision la résolution des problèmes et la simplifier, car l'ordre d'exécution est clair. De nombreux modules Ansible sous-jacents fonctionnent aussi de manière déclarative. Ils modifient le système cible uniquement si l'état de celui-ci diffère de l'état de configuration souhaité.
Architecture stateful et stateless
Chaque outil perçoit et suit l'infrastructure différemment au fil du temps :
- Terraform est un outil stateful. Il tient à jour un fichier d'état qui sert de source unique de vérité, dans lequel il consigne toutes les ressources d'infrastructure provisionnées ainsi que leur configuration actuelle. C'est ce fichier qui permet à Terraform de gérer le cycle de vie complet des ressources de manière fiable, de leur provisionnement à leur retrait lorsqu'elles ne sont plus utiles, en passant par leur mise à l'échelle.
- Ansible est un outil principalement stateless. Il ne consigne pas les modifications de l'infrastructure dans un fichier d'état persistant. Il s'appuie plutôt sur le principe de l'idempotence, qui garantit qu'une opération fournit le même résultat à chaque exécution, sans avoir à apporter de modifications inutiles. Ansible atteint la configuration souhaitée en interrogeant directement le système cible avant d'effectuer une modification.
Infrastructure immuable et modifiable
Les deux outils suivent des principes distincts pour la mise à jour de l'infrastructure :
- Terraform convient davantage aux infrastructures immuables (ou non modifiables). S'il est nécessaire d'effectuer une modification ou une mise à jour importante, Terraform va plutôt supprimer l'ancienne ressource pour la remplacer par une autre correctement configurée. Cette stratégie réduit le risque d'échec qui peut survenir au fil du temps dans les configurations complexes.
- Ansible est un outil adapté aux infrastructures modifiables. Il peut effectuer avec précision des modifications sur place dans des systèmes en cours d'exécution. Cette capacité est essentielle pour les tâches de déploiement et de maintenance, telles que l'application de correctifs de sécurité, l'exécution de mises à jour du système d'exploitation, ou encore le réglage des paramètres du pare-feu sur un serveur difficilement remplaçable.
Écarts de configuration
Un écart de configuration survient quand l'infrastructure exécutée en production ne correspond plus aux caractéristiques définies dans le code source. Les deux outils offrent une solution différente à ce problème :
- Terraform utilise son fichier d'état persistant pour détecter activement les écarts. Il peut comparer l'infrastructure en cours d'exécution avec ce fichier et signaler instantanément toute divergence.
- Ansible réduit généralement les écarts en s'appuyant sur des tâches idempotentes qui sont exécutées en continu afin de toujours appliquer la configuration souhaitée. Ainsi, le système ne peut pas beaucoup s'éloigner de l'état attendu.
Association d'Ansible et de Terraform
Cette comparaison entre Terraform et Ansible met en évidence la complémentarité de ces deux outils : ils sont plus efficaces ensemble. En exploitant les points forts de chacun, les entreprises peuvent mettre en œuvre des processus automatisés complets, depuis le provisionnement de l'infrastructure jusqu'aux déploiements et aux configurations d'applications.
Gestion du cycle de vie
Le plus souvent, les deux outils sont utilisés à la chaîne. Terraform se charge du provisionnement initial en créant les différents composants de l'infrastructure cloud, comme les serveurs et les réseaux. Ansible prend le relais pour la configuration du déploiement : application des politiques de sécurité, installation des logiciels indispensables et déploiement du code de l'application dans ces nouvelles ressources. Il se charge également des opérations de maintenance, telles que l'application de correctifs, les mises à jour et les modifications de la configuration.
Orchestration avec Ansible
Pour les workflows complexes, la solution Ansible Automation Platform peut servir de plateforme centralisée d'orchestration et intégrer Terraform à une stratégie d'automatisation plus étendue. Elle peut réaliser des tâches de pré-provisionnement et déclencher un déploiement Terraform pour créer l'infrastructure. Elle peut aussi exécuter des tâches de post-provisionnement, comme la configuration des applications, tout en s'intégrant à des outils de gestion des services informatiques tels que ServiceNow à des fins de suivi.
Intégrations de Terraform et d'Ansible Automation Platform
Chez Red Hat, nous proposons une collection certifiée de contenus Terraform pour Ansible, notamment des modules qui aident à gérer et provisionner l'IaC avec HashiCorp Terraform (HCP Terraform et Terraform Enterprise). Cette collection permet d'utiliser des fonctionnalités d'automatisation semblables à celles d'autres intégrations d'outils de provisionnement cloud pour Ansible, comme AWS CloudFormation, Azure Resource Manager et Helm.
HashiCorp comprend également un fournisseur Terraform pour les interactions avec Ansible. Il s'agit d'un plug-in qui ajoute des ressources et des sources de données que Terraform peut gérer. Les fournisseurs doivent être déclarés dans la configuration Terraform pour que l'outil puisse les installer et les utiliser. Le fournisseur Ansible pour Terraform permet à Terraform de gérer directement l'inventaire Ansible. Puisqu'il automatise le transfert, il n'est plus nécessaire d'utiliser des plug-ins d'inventaire distincts pour rassembler manuellement des informations sur l'infrastructure nouvellement provisionnée avant de les transmettre à Ansible. Les utilisateurs peuvent définir l'utilisation d'un inventaire Ansible directement dans leur configuration Terraform, puis laisser les playbooks Ansible exécuter les tâches de configuration sur les nouveaux hôtes juste après leur création.
Nos solutions
Les outils Open Source Ansible et Terraform offrent une base pour l'IaC. Dans les grandes entreprises, les opérations de mise à l'échelle et de gouvernance de ces workflows intégrés posent toutefois des défis en matière de sécurité et de cohérence. La solution Red Hat Ansible Automation Platform réduit cette complexité en transformant les systèmes communautaires d'automatisation en une solution d'entreprise stratégique. Elle offre le niveau de contrôle centralisé nécessaire pour gérer des processus automatisés complexes qui couvrent le provisionnement avec Terraform et la configuration continue avec Ansible.
Disponible via une souscription, la solution Ansible Automation Platform est un produit fiable qui repose sur l'Open Source et assure la prise en charge de l'ensemble du cycle de vie au sein des entreprises. Elle s'appuie sur la communauté Ansible, qui bénéficie de l'expérience et du soutien de milliers de contributeurs dans le monde. La solution Ansible Automation Platform aide les entreprises à créer, gérer et faire évoluer leurs charges de travail d'automatisation. Elle offre une base stable, flexible et axée sur la sécurité pour le déploiement de processus automatisés de bout en bout, notamment pour le cloud hybride, l'edge computing, les réseaux, la sécurité, l'infrastructure et de nombreux autres cas d'utilisation.
Rationaliser les pipelines CI/CD avec Red Hat Ansible Automation Platform
Découvrez comment Red Hat Ansible Automation Platform peut vous aider à gérer des environnements informatiques complexes, automatiser les processus de sécurité et réduire le temps nécessaire aux déploiements.