Introduction à Terraform
Nov 24, 2022Bonjour
Nous allons voir ce qu'est Terraform dans cet article
Pour progresser en DevOps, savoir provisionner des infrastructures automatiquement est important
En effet, dans ta CI/CD, tu testes ton code, tu le build, tu le package et tu le déploies.
Mais sur quoi ? Sur une infra ! Si la partie code est toute automatisée, mais que t'es obligé de déployer tes serveurs à la main, on perd tout l'intérêt du DevOPS.
Et malheureusement, en tant que Dev, laisser cette partie aux OPS te prive de montrer en quoi tu es un Dev complet, avec des compétences connexes intéressantes.
"C'est trop compliqué"
C'est la raison principale qui fait que les Dev s'intéresse peu à l'IaC
Mais il y a d'autres :
- "M'enfiche, j'ai qu'un front, un back et une bdd, pas besoin d'automatisation"
- "Je laisse l'infra aux OPS, moi c'est le Dev"
- "J'ai pas le temps de m'y pencher"
On va tacler tout ça d'un coup dans l'article. Et tu verras qu'il n'y a pas de plus pour comprendre et savoir en parler.
Qu'est ce que Terraform ?
C'est un outil pour gérer et automatiser les infrastructures (server, réseaux, cloud ...)
Ca permet aussi de gérer tes plateformes et les services qui tournent sur ces plateformes
C'est Open Source
Ca utilise un langage Déclaratif :
C'est à dire tu ne décris pas les étapes pour atteindre un but
Tu décris le but final que tu veux atteindre, et Terraform se charge de faire tout
Le contraire de Déclaratif, c'est Impératif (comme une recette de cuisine)
C'est un outil pour provisionner des infras
Exemple : tu as dév une App.
Elle est composée de plusieurs micro services, de bases de données, de conteneur Docker ...
Et que tu veux faire tourner tout ça sur AWS.
Ce que tu fais habituellement :
Tu vas sur la console AWS
Tu prépare ton Infra :
- Mettre le réseau
- Installer les EC2
- Installer Docker et d'autres outils dessus
- Gérer la sécurité des accès
Et quand tout est prêt, tu déploies tes images dessus
Y'a bien 2 étapes : provisionner son infra puis déployer l'app dessus
Donc Terraform intervient dans la 1ère étape : Provisionner l'infra
Mais c'est quoi la différence avec Ansible ?
C'est la question qui revient tout le temps
Les deux sont des outils IaC : infrastructure as Code
Donc les deux provisionnent, automatisent et configurent des infra
Terraform est surtout fort pour le provisionning d'infra
Mais ça PEUT aussi déployer des apps
Ansible est surtout un outil de configuration
Une fois que l'infra est provisionnée, Ansible peut la customiser et la configurer facilement
Et aussi déployer des applications, installer et updater des softwares ...
Donc, dans les équipes matures, on utilise les deux pour avoir une couverture maximale d'automatisation
Quand utiliser Terraform ?
On l'a vu pour créer une infra
Tu peux aussi apporter des changements à une infra existante et déjà gérée par Terraform
Tu peux aussi importer la conf d'une infra non gérée par Terraform pour la gérer par Terraform ensuite (un peu plus touchy par contre)
Donc ton "code" Terraform évolue en même temps que le code de ton App
Ca permet quelque chose de puissant
Vu que tu as mis en place ton infra avec Terraform, tu peux répliquer cette infra facilement
Exemple : Pour les tests de ton app, tu as mis en place une infra avec Terraform. Tu sais que tout fonctionne et tout est testé.
Tu peux utiliser le code Terraform qui a monté ton env de test pour construire exactement une infra de prod identique
Et justement comment ca fonctionne ?
Comment Terraform sait ce qu'il y a à faire ?
Puis quelles modifications ont eu lieues ?
Puis comment ca se connecte avec des Provider Cloud par exemple ?
L'archi de Terraform est simple :
Il y a le Core (où tout se passe)
Le Core prend en entrée 2 sources :
- Tf Config : la configuration que tu fais (le code infra que tu dois écrire)
- Le state : c'est l'état actuel de ton infra
Tu as deviné la suite :
Core prend le state et le tf config, regarde la différence. Ce qui est VS ce qui est voulu.
Il sait alors ce qui doit être créé, modifié ou détruit. Il liste alors les choses qu'il va devoir faire.
C'est le Plan
Ok. Maintenant pour faire les modifications sur les infra directement, il a besoin d'un autre composant : les providers
Il y a des providers pour tout (environ une 100aine)
Pour gérer du AWS/GCP/Azure, du K8S, du Linux ...
Chaque provider te donne accès à des ressources
Par exemple, quand tu veux créer une EC2 sur AWS, le provider AWS possède déjà un Objet (aws_instance) que tu peux utiliser
Un peu comme une Lib qui te met à disposition des fonctions prêtes à l'emploi
Donc une fois que le Plan est prêt, Terraform utilise les providers pour exécuter ce plan.
Voici un exemple d'un conf Terraform basique :
On définit le provider que l'on va utiliser (un peu comme un import lib)
Ensuite, on déclare la ressource que l'on veut. Ici un VPC AWS.
Ce VPC a un attribut que l'on fait va configurer
(tout est documenté sur le site Terraform pour chaque provider)
Revenons sur la différence entre Déclaratif et Impératif
En Déclaratif, tu définis le résultat attendu : le QUOI
- Je veux 5 serveurs avec tel conf réseaux
- Je veux tel user avec tel profil
En Impératif, tu définis les étapes pour atteindre ton but : le COMMENT
Sur une création initiale d'une infra, la différence est peu évidente
Maintenant imagine que tu veux faire évoluer ton infra au cours du temps
En reprenant l'exemple, on veut supprimer 2 serveurs et ajouter un Firewall
En Impératif tu devras ajouter à la fin : supprime 2 serveurs, puis ajoute un Firewall
Tu donnes des instructions
En Déclaratif, tu devras juste dire :
- Je veux 3 serveurs avec tel conf réseaux
- Je veux 1 firewall
Je veux un nouvel état final de mon infra. Débrouille toi pour l'atteindre
Tu ajustes ton fichier de configuration initiale au lieu d'y ajouter des nouvelles instructions
C'est bien entendu plus simple, plus propre et lisible, plus maintenable et surtout juste en lisant tu connais l'état de la conf.
Les commandes Terraform
Tu as écrit ton fichier TF pour définir l'état de l'infra que tu veux atteindre
Tu peux lancer le provisionning maintenant
terraform init pour dl automatiquement tous les éléments dont il a besoin
terraform plan pour créer le plan d'action qui sera réalisé et te permettre de voir ce qu'il va faire
terraform apply pour exécuter le plan une fois que t'es sûr
terraform destroy pour détruire ton infra complètement
Voilà
J'espère que ca t'a permis de comprendre Terraform
Tu vas pouvoir maintenant creuser quand ca te sera utile
La newsletter pour ne rien louper
Rejoins les 2500 lecteurs de la newsletter pour obtenir des conseils, des stratégies et des ressources pour développer et monétiser tes compétences Tech.