Ansible_Terraform

6 janvier 2022

Terraform est un outil très prisé dans le métier de DevOps. Bien que très facile d’utilisation, il peut, dans certain cas, ne pas répondre totalement à notre besoin. Je vais vous présenter dans ce retour d’expérience, pourquoi nous avons préféré utiliser Ansible plutôt que Terraform sur un projet que j’ai récemment réalisé. Laissez-moi d’abord vous présenter/rappeler ce qu’est Terraform.

Terraform

Terraform est un outil d'Infrastructure as Code (IaC) open-source de la société HashiCorp. Très utilisé dans la démarche DevOps, cet outil permet d'automatiser et gérer facilement le déploiement d'infrastructures. Terraform s'interface très bien avec les providers Cloud tels qu'AWS, GCP, Azure et tant d'autres.

Très facile d'utilisation, Terraform permet de déployer facilement une infrastructure. L'infrastructure est décrite dans des fichiers au langage HLC et est déployée en 2 commandes. Terraform stocke l'état de l’infrastructure gérée et la configuration. Cet état est utilisé pour mapper les ressources du monde réel à la configuration souhaitée.

Le fichier json décrivant l'état est stocké par défaut dans un fichier local nommé "terraform.tfstate", mais il peut également être stocké à distance, ce qui fonctionne mieux dans un environnement d'équipe.

Terraform permet aussi de facilement dupliquer une infrastructure. Par exemple créer plusieurs environnements pour pouvoir développer, tester puis mettre en prod.

REX

Dans certains projets, Terraform n'est pas l'outil le plus adapté. Je vais vous donner mon retour d'expérience sur un projet que j'ai récemment réalisé. J'ai commencé un projet de création de cloud pouvant stocker des données sensibles. Pour des raisons de sécurité, nous n'avions pas accès à internet sur nos postes de travail. De plus, nous avons créé ce cloud on premise, sans passer par les grands cloud providers.

Les contraintes rencontrées

Offline

Ce projet se faisant sans internet, nous ne pouvions donc pas télécharger nos modules et providers Terraform directement depuis internet.

Provider Terraform

Terraform fonctionne avec des providers. Un provider permet de manager une ressource cloud grâce à son API (exemple : le provider AWS manage les ressources AWS grâce à l'AWS CLI). Même s'il existe une multitude de providers (officiel ou de la communauté), il se peut que celui dont vous avez besoin n'existe pas. Cela ajoute de la complexité supplémentaire au projet puisqu'il faudra coder ce provider, sous réserve qu'il existe bien une API qui manage les ressources à déployer.

Beaucoup de sysadmin

Sur mon projet, nous avions beaucoup d'administration de systèmes à faire. En plus de déployer une machine virtuelle, nous devions configurer son réseau, installer certains packages et faire du durcissement d'OS.

Bien que Terraform soit très pratique pour déployer des machines virtuelles, c'est un outil qui atteint ses limites lorsqu'il s'agit de faire beaucoup d'administration de système.

Pour toutes ces raisons, nous avons décidé d'utiliser Ansible pour déployer et configurer nos machines virtuelles.

Ansible

Ansible est un outil open source pour la configuration et la gestion des ordinateurs. Contrairement à Terraform, Ansible est un outil impératif. En effet, on liste dans des fichiers YAML des successions d'étapes à faire. Ansible ira se connecter en SSH à notre machine virtuelle et y exécutera toutes ces commandes step by step. Cet outil est cloud agnostique.

Ce n'est pas une nouvelle technologie, en effet Ansible a été créé en 2012. Actuellement, Ansible est développé par la société RedHat.

Sur mon projet, Ansible répondait parfaitement au besoin. En effet, il existait déjà un Artifactory dans notre infrastructure. Il nous était donc facile d'ajouter les modules Ansible dont nous avions besoin.

Ces deux outils sont fortement complémentaires. Tandis que Terraform permet de déployer facilement une infrastructure, Ansible facilite le formatage de nos machines virtuelles.

Bien que cela réponde parfaitement à notre besoin, nous aurions pu aller plus loin en déployant des outils complémentaires pour Ansible. Je pense notamment à Ansible Tower. Cet outil est une API pour rendre Ansible plus facilement utilisable par les équipes informatiques. Cela permet par exemple de faire des inventaires dynamiques.