
Guide Terraform et l'IaC (Infrastructure en tant que Code)
Dans ce guide nous allons couvrir tous les concepts fondamentaux de Terraform et son fonctionnement a une brève introduction de l'Infrastructure as Code (IaC), le cycle de vie de Terraform, et tous les concepts de base que tout débutant devrait connaître.
Ce guide vous permettra de démarrer rapidement l'utilisation de Terraform.
Qu'est-ce que l'infrastructure en tant que code (IaC) ?
Infrastructure as Code (IaC) est une terminologie très répandue parmi les professionnels DevOps et une pratique DevOps clé dans l'industrie. Il s'agit du processus de gestion et de provisionnement de l'infrastructure informatique complète (comprenant à la fois des machines physiques et virtuelles) à l'aide de fichiers de définition lisibles par machine. Il aide à automatiser le centre de données complet en utilisant des scripts de programmation.
Les outils d'infrastructure en tant que code (IaC) permettent de gérer l'infrastructure à l'aide de fichiers de configuration plutôt qu'au moyen d'une interface utilisateur graphique. L'IaC vous permet de construire, de modifier et de gérer votre infrastructure d'une manière sûre, cohérente et reproductible en définissant des configurations de ressources que vous pouvez modifier, réutiliser et partager.

Outils populaires de l'IaC
1. Terraform : Un outil déclaratif open-source qui offre des modules pré-écrits pour construire et gérer une infrastructure.
2. Chef : un outil de gestion de la configuration qui utilise des livres de cuisine et des recettes pour déployer l'environnement souhaité. Utilisé de préférence pour déployer et configurer des applications à l'aide d'une approche « pull-based ».
3. Puppet : Outil populaire de gestion de la configuration qui suit un modèle client-serveur. Puppet a besoin que des agents soient déployés sur les machines cibles avant de pouvoir commencer à les gérer.
4. Ansible : Ansible est utilisé pour construire des infrastructures ainsi que pour déployer et configurer des applications au-dessus d'elles. Il est mieux utilisé pour l'analyse ad hoc.
5. Packer : Outil unique qui génère des images de VM (pas de VM en cours d'exécution) basées sur les étapes que vous fournissez. Utilisé de préférence pour la création d'images de calcul.
6. Vagrant : Construit des VM à l'aide d'un flux de travail. Utilisé de préférence pour créer des VM de développement préconfigurées dans VirtualBox.
Qu'est-ce que Terraform ?
Terraform est l'un des outils d'Infrastructure-as-code (IaC) les plus populaires, utilisé par les équipes DevOps pour automatiser les tâches d'infrastructure. Il est utilisé pour automatiser le provisionnement de vos ressources cloud. Terraform est un outil de provisionnement open-source, agnostique au cloud, développé par HashiCorp et écrit en langage GO.
Les avantages de Terraform
- Fait de l'orchestration, pas seulement de la gestion de configuration
- Prend en charge de nombreux fournisseurs tels que AWS, Azure, Oracle, GCP, et bien d'autres encore
- Fournit une infrastructure immuable où les changements de configuration se font en douceur
- Utilise un langage facile à comprendre, HCL (HashiCorp configuration language)
- Facilement portable vers n'importe quel autre fournisseur
Gérer tout type d'infrastructure avec Terraform
Les plugins Terraform, appelés fournisseurs, permettent à Terraform d'interagir avec des plateformes cloud et d'autres services via leurs interfaces de programmation d'applications (API). HashiCorp et la communauté Terraform ont écrit plus de 1 000 fournisseurs pour gérer les ressources sur Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk et DataDog, pour n'en citer que quelques-uns. Vous trouverez dans le registre Terraform des fournisseurs pour la plupart des plateformes et des services que vous utilisez déjà. Si vous ne trouvez pas le fournisseur que vous recherchez, vous pouvez écrire le vôtre..
Standardisez votre flux de déploiement
Les fournisseurs définissent des unités individuelles d'infrastructure, par exemple des instances de calcul ou des réseaux privés, en tant que ressources. Vous pouvez composer des ressources provenant de différents fournisseurs en configurations Terraform réutilisables appelées modules, et les gérer à l'aide d'un langage et d'un flux de travail cohérents.
Le langage de configuration de Terraform est déclaratif, ce qui signifie qu'il décrit l'état final souhaité pour votre infrastructure, contrairement aux langages de programmation procéduraux qui nécessitent des instructions étape par étape pour exécuter les tâches. Les fournisseurs de Terraform calculent automatiquement les dépendances entre les ressources pour les créer ou les détruire dans le bon ordre.

Concepts fondamentaux de Terraform
Cycle de vie de Terraform
Le cycle de vie de Terraform comprend les étapes suivantes : démarrage, planification, application et destruction.
- Terraform init initialise l'environnement Terraform (local). Il n'est généralement exécuté qu'une seule fois par session.
- Terraform plan compare l'état de Terraform avec l'état tel quel dans le nuage, construit et affiche un plan d'exécution. Cela ne modifie pas le déploiement (lecture seule).
- Terraform apply exécute le plan. Cela modifie potentiellement le déploiement.
- Terraform destroy supprime toutes les ressources qui sont régies par cet environnement terraform spécifique.
Concepts clés
- Variables : Terraform possède des variables d'entrée et de sortie, il s'agit d'une paire clé-valeur. Les variables d'entrée sont utilisées comme paramètres pour entrer des valeurs au moment de l'exécution afin de personnaliser nos déploiements. Les variables de sortie sont les valeurs de retour d'un module Terraform qui peuvent être utilisées par d'autres configurations.
- Fournisseur : Les utilisateurs de Terraform provisionnent leur infrastructure sur les principaux fournisseurs de cloud tels que AWS, Azure, OCI et autres. Un fournisseur est un plugin qui interagit avec les différentes API nécessaires pour créer, mettre à jour et supprimer diverses ressources.
- Module : Tout ensemble de fichiers de configuration Terraform dans un dossier est un module. Chaque configuration Terraform possède au moins un module, appelé module racine.
- État : Terraform enregistre les informations relatives à l'infrastructure créée dans un fichier d'état Terraform. Grâce au fichier d'état, Terraform est en mesure de retrouver les ressources qu'il a créées précédemment, censées les gérer et les mettre à jour en conséquence.
- Ressources : Les fournisseurs de cloud proposent divers services dans leurs offres, ils sont référencés en tant que ressources dans Terraform. Les ressources Terraform peuvent être des instances de calcul, des réseaux virtuels ou des composants de plus haut niveau tels que des enregistrements DNS. Chaque ressource possède ses propres attributs pour la définir.
- Source de données : La source de données effectue une opération en lecture seule. Elle permet de récupérer ou de calculer des données à partir de ressources/entités qui ne sont pas définies ou gérées par Terraform ou la configuration Terraform actuelle.
- Plan : C'est l'une des étapes du cycle de vie de Terraform où l'on détermine ce qui doit être créé, mis à jour ou détruit pour passer de l'état réel/courant de l'infrastructure à l'état désiré.
- Appliquer : C'est l'une des étapes du cycle de vie de Terraform où l'on applique les changements de l'état réel/courant de l'infrastructure afin d'atteindre l'état désiré.
Configuration de Terraform
Fournisseurs Terraform
Un fournisseur est chargé de comprendre les interactions de l'API et d'exposer les ressources. Il s'agit d'un plug-in exécutable qui contient le code nécessaire pour interagir avec l'API du service. Les configurations Terraform doivent déclarer les fournisseurs dont elles ont besoin pour que Terraform puisse les installer et les utiliser.

Terraform a plus d'une centaine de fournisseurs pour différentes technologies, et chaque fournisseur donne à l'utilisateur de Terraform l'accès à ses ressources. Ainsi, par le biais du fournisseur AWS, par exemple, vous avez accès à des centaines de ressources AWS comme les instances EC2, les utilisateurs AWS, etc.
Fichiers de configuration Terraform
Les fichiers de configuration sont un ensemble de fichiers utilisés pour décrire l'infrastructure dans Terraform et portent les extensions .tf et .tf.json. Terraform utilise un modèle déclaratif pour définir l'infrastructure. Les fichiers de configuration vous permettent d'écrire une configuration qui déclare l'état souhaité. Les fichiers de configuration sont constitués de ressources avec des paramètres et des valeurs représentant l'état souhaité de votre infrastructure.

Une configuration Terraform est composée d'un ou plusieurs fichiers dans un répertoire, de binaires de fournisseurs, de fichiers de plan et de fichiers d'état une fois que Terraform a exécuté la configuration.
1. Fichier de configuration (fichiers *.tf) : C'est ici que nous déclarons le fournisseur et les ressources à déployer, ainsi que le type de ressource et tous les paramètres spécifiques aux ressources.
2. Fichier de déclaration des variables (variables.tf ou variables.tf.json) : Il s'agit de déclarer les variables d'entrée nécessaires à l'approvisionnement des ressources.
3. Fichiers de définition des variables (terraform.tfvars) : Ici, nous attribuons des valeurs aux variables d'entrée
4. Fichier d'état (terraform.tfstate) : un fichier d'état est créé une fois que Terraform est exécuté. Il stocke l'état de notre infrastructure gérée.
Commencer à utiliser Terraform
Pour commencer à construire des ressources d'infrastructure à l'aide de Terraform, il y a quelques points à respecter. Les étapes générales pour déployer une ou plusieurs ressources dans le nuage sont les suivantes :
- Configurer un compte cloud sur n'importe quel fournisseur de cloud (AWS, Azure, OCI, Xbit)
- Installer Terraform
- Ajouter un fournisseur - AWS, Azure, OCI, GCP, ou autres
- Écrire les fichiers de configuration
- Initialiser les fournisseurs Terraform
- PLAN (DRY RUN) à l'aide de terraform plan
- APPLY (créer une ressource) à l'aide de terraform apply
- DESTROY (Supprimer une ressource) en utilisant terraform destroy
Terraform : Foire aux Questions
Dois-je avoir une expérience préalable de la programmation ou de l'infrastructure pour suivre le guide ?
Non, il n'est pas nécessaire d'avoir une expérience préalable de la programmation ou de l'infrastructure pour suivre ce guide. Il est conçu pour les débutants et ne suppose aucune connaissance préalable de Terraform. Le guide fournit des explications et des exemples étape par étape pour aider les nouveaux venus à comprendre et à appliquer les concepts de manière efficace.
Existe-t-il des conditions préalables à l'utilisation de Terraform ?
Le guide peut mentionner quelques conditions préalables, telles qu'une compréhension de base des concepts de l'informatique en nuage et la possession d'un compte auprès d'un fournisseur d'informatique en nuage (si vous envisagez de provisionner des ressources dans le nuage). En outre, il peut recommander d'installer Terraform et un éditeur de texte adapté à l'écriture de code.
Le guide fournit-il des exemples et des exercices pratiques ?
Oui, le Guide du débutant Terraform comprend généralement des exemples et des exercices pratiques tout au long de son contenu. Ces exemples aident à consolider les concepts et permettent aux lecteurs de s'entraîner à écrire des configurations Terraform, à exécuter des commandes et à gérer les ressources de l'infrastructure.
Comment Infrastructure as Code gère-t-il les mises à jour et les changements de l'infrastructure ?
Les outils d'Infrastructure as Code gèrent généralement les mises à jour et les changements en comparant l'état souhaité défini dans le code avec l'état actuel de l'infrastructure. Lorsque des changements sont apportés au code, les outils génèrent un plan d'exécution qui décrit les modifications nécessaires pour atteindre l'état souhaité. Ce plan peut être revu et appliqué pour mettre à jour ou modifier l'infrastructure en conséquence.
Puis-je utiliser Infrastructure as Code pour une infrastructure existante ?
Oui, l'infrastructure en tant que code peut être utilisée pour l'infrastructure existante. En définissant l'infrastructure existante dans le code, vous pouvez capturer son état actuel et y apporter des modifications à l'aide de fichiers de configuration basés sur le code. Cette approche vous permet de gérer l'infrastructure existante de manière cohérente et automatisée.
Contactez Xbit pour plus d'informations sur nos expertises et offres


