Introduction à Terraform

culture générale informatique devops Nov 24, 2022

Bonjour

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.