Objectifs :
- Comprendre les concepts :
Terraform core
&Terraform plugin
- Connaitre les différents workflows de Terraform
Rappels : 101 Terraform
Terraform est un projet open source créé en 2014 par Hashicorp.
A l'écriture de ce blog, Terraform a :
35K
⭐️- Plus de
30k commits
- Plus de
1600 contributeurs
https://github.com/hashicorp/terraform
Ce qu'on peut faire avec Terraform :
- Gérer des ressources d'infrastructure de plusieurs fournisseurs cloud
- Créer une infrastructure réseau sur AWS
- Déployer un cluster Kubernetes sur GCP
- Intéragir avec des produits d'infrastructure
- Insérer des secrets dans un Vault
- Déployer une application sur Heroku
- Configurer des services d’infrastructure
- Créer un projet/groupe/utilisateur sur GitLab
- Initialiser une base de données PostgreSQL (et ses utilisateurs)
Les concepts : Terraform Core & Terraform Plugin
Terraform a la capacité de se brancher avec de nombreux providers : AWS, GCP, AZURE, ELASTIC... Mais le fonctionnement interne de terraform ne change pas entre 2 providers.
Pour cela, Terraform est composé de 2 parties (séparées par un contrat d'interface) :
Terraform Core : Il s'agit du binaire Terraform qui communique avec les plugins pour gérer les ressources de l'infrastructure. Il fournit une interface commune qui vous permet de tirer parti de nombreux fournisseurs de Clouds, bases de données, services et solutions internes.
Terraform Plugin : Il s'agit de binaires exécutables écrits en Go qui communiquent avec Terraform Core via une interface RPC. Chaque plugin expose une implémentation pour un service spécifique, tel que le fournisseur AWS ou le fournisseur cloud-init.
Actuellement, Terraform ne supporte qu'un seul type de plugin appelé Providers.
Vous pouvez retrouver la liste en suivant le lien : https://registry.terraform.io/browse/providers
Des plugins custom
On peut également développer nos propres providers, Terraform propose un tutoriel : Implement a Provider with the Terraform Plugin Framework
Cinématique générale de Terraform
- Le développeur(se) 🧑🏻💻 développe le code Terraform
- Le développeur(se) 🧑🏻💻 exécute des commandes Terraform
- Terraform lit la configuration (code) ainsi que le fichier d'état **
- Terraform crée un plan d'exécution : arbre de dépendances
- Terraform communique avec les APIs du provider pour appliquer les changements
Fichier d'état
** Le fichier d'état est utilisé par Terraform pour faire correspondre les ressources du monde réel à votre configuration et conserver la trace des métadonnées.
Les workflows Terraform
Dans cette section nous allons voir les différents workflow Terraform :
Workflow standard
Workflow lors d'une création d'infrastructure
Workflow lors d'une mise à jour d'infrastructure
Workflow standard
Pour mettre en place notre working directory il faut lancer la commande suivante :
terraform init
⚠️ A chaque ajout de nouveau module ou de provider il faudra, re-lancer cette commande.
Une fois l'initialisation faite, le worklow standard pour développer du Terraform peut se résumer en 3 étapes :
terraform plan
: Afficher les changements requis par la configuration actuelle (plan d'exécution)terraform apply
: Appliquer le plan d'exécution sur l'infrastructure réelle.terraform destroy
: Supprimer toute l'infrastructure crée avec Terraform
💡 Une fois qu'on a développé notre code Terraform, on peut le vérifier avec la commande :
terraform validate
avant même de lancer la commandeterraform plan
pour avoir un feedback plus rapide.
Pour aller plus loin : The Core Terraform Workflow
Workflow lors d'une création d'infrastructure
Pour la première exécution de la commande terraform apply
:
- Terraform crée l'infrastructure définie dans votre configuration (code terraform).
- Terraform crée le fichier d'état :
tfstate
.
Workflow lors d'une mise à jour d'infrastructure
Récupération du tfstate
: récupérer le dernier état mis à jour par Terraform.Récupération des états réels
: récupérer les éventuels changements d'infrastructure, externe à Terraform (modification à la main).Application des différences
: créer un plan d'exécution et appliquer ces changements sur l'infrastructure réelle.Mise à jour du tfstate
: mettre à jour le tfstate avec l'infrastructure actuelle.
Conclusion
Pour aller plus loin, dans le prochain article nous expliquerons en détail le fichier d'état.
Et pour ceux qui souhaitent creuser les notions Terraform Core
et Terraform Plugin
on vous recommande la vidéo :
Comment développer votre propre plugin Terraform ?