Retour aux articles

Le Cloud sur votre PC - Partie 2 : Automatiser la création de vos VMs avec Terraform

· 6 min read

Dans la Partie 1, nous avons créé des VM avec Multipass, préparé leurs accès et appris à les faire communiquer. Notre petit cloud local commence à prendre forme !

Jusqu’ici, nous lancions les commandes de création nous-mêmes. Pour deux machines, cela reste simple. Mais si nous voulons retrouver le même environnement pour chaque nouveau projet, il faut reprendre les commandes, les noms et les ressources à attribuer.

Et si nous décrivions plutôt les machines souhaitées dans des fichiers, pour laisser un outil se charger de leur création ?

C’est ce que nous allons faire avec Terraform, en gardant Multipass pour créer nos VM. Nous découvrirons le principe de l’Infrastructure as Code à travers notre labo. Vous vouliez essayer Terraform sans payer des ressources cloud ? Notre PC nous offre déjà un terrain d’essai.

Attention

L’objectif n’est pas de faire le tour de Terraform, mais de découvrir comment l’utiliser avec Multipass pour décrire et créer nos VM. Notre PC devient un terrain d’essai pour l’IaC, sans compte cloud !

Les prérequis

Pour suivre cet article, prévoyez :

  • Multipass installé et fonctionnel, comme dans la première partie ;
  • suffisamment de mémoire et d’espace disque disponibles pour deux petites VM ;
  • une connexion Internet pour télécharger les éléments nécessaires ;
  • les fichiers du labo, disponibles dans le dossier infra/multipass-terraform du dépôt the-labs

L'IaC et Terraform, en quelques mots

L'Infrastructure as Code, ou IaC, consiste à décrire et gérer son infrastructure à partir de fichiers de code ou de configuration. Ces fichiers peuvent être relus, partagés et versionnés, comme le code d'une application.

Terraform est un outil qui permet cette approche. Nous décrivons les ressources souhaitées dans des fichiers .tf, généralement avec le langage HCL. Terraform prépare ensuite un plan d'actions pour obtenir l'infrastructure décrite.

Pour notre exemple, les ressources seront simplement des VMs. Pas besoin d'un compte cloud pour découvrir le principe !

Bon à savoir

Cet article n'est pas un cours complet sur Terraform. Pour approfondir sa syntaxe et ses possibilités, je vous recommande la documentation officielle. Ici, nous allons surtout comprendre son fonctionnement et l'appliquer à ce que nous connaissons déjà : Multipass.

Que se passe-t-il en vrai ?

Terraform ne sait pas, à lui seul, créer toutes les ressources de toutes les plateformes. Il s'appuie sur des providers : des plugins qui font le lien avec les systèmes à piloter.

Un provider est un plugin qui permet à Terraform de communiquer avec une plateforme.

  • aws pour Amazon Web Services
  • azurerm pour Azure
  • google pour Google Cloud
  • multipass pour Multipass

Pour un fournisseur cloud, le provider communique généralement avec ses API : il traduit les opérations de Terraform en demandes de création, de consultation ou de suppression de ressources.

Le principe est donc :

Rendering diagram…

Dans notre cas, nous utiliserons le provider communautaire larstobi/multipass. Celui-ci appelle la commande Multipass installée sur notre PC ; il ne passe pas par l'API d'un fournisseur cloud distant.

Terraform connect with Multipass provider

Vous parlez à Terraform, Terraform passe par le provider de Multipass, et Multipass s'occupe des VMs. Les rôles sont complémentaires : nous changeons la manière de demander les VM, pas l'outil qui les crée.

Installation de Terraform

Terraform est disponible sur Linux, macOS et Windows.

  • Linux / macOS
bash
brew install terraform
  • Windows
bash
winget install Hashicorp.Terraform

Vérifiez l’installation :

bash
terraform version

Le flow avec Terraform

Voici les étapes les plus courants que vous allons suivre en utilisant Terraform :

Flow de travail avec Terraform

  • terraform init: initialise le projet Terraform et télécharge les providers et dépendances nécessaires ;
  • terraform plan: analyse la configuration Terraform et affiche les changements qui seront effectués sur l’infrastructure, sans créer ni modifier de ressources ;
  • terraform apply: applique les changements définis dans la configuration et procède à la création ou à la modification des ressources ;
  • terraform destroy : supprime les ressources gérées par Terraform.

Pour notre project: Terraform et Multipass

Clonez le projet :

bash
git clone git@github.com:victor3spoir/the-labs.git
cd the-labs/infra/multipass-terraform

La structure du dossier ressemble à ceci :

plaintext
multipass-terraform
 ├ terraform
 │  ├ main.tf
 │  ├ providers.tf
 │  ├ variables.tf
 │  └ config
 │     ├ srv-01.yml
 │     └ srv-02.yml

Les fichiers principaux sont :

  • main.tf : définition des VMs
  • providers.tf : déclaration du provider
  • variables.tf : paramètres configurables
  • config/* : fichiers cloud-init

Le provider

Dans providers.tf, on déclare le provider Multipass :

yaml
terraform {
  required_providers {
    multipass = {
      source  = "larstobi/multipass"
      version = "1.4.3"
    }
  }
}
provider "multipass" {}

Cela indique à Terraform que les ressources doivent être créées avec Multipass.

Les VMs

Les machines virtuelles sont définies dans main.tf

yaml
resource "multipass_instance" "srv_01" {
  name   = "srv-01"
  cpus   = 2
  memory = "1G"
  disk   = "10G"
  cloudinit_file = "${path.module}/config/srv-01.yml"
}

resource "multipass_instance" "srv_02" {
  name   = "srv-02"
  cpus   = 1
  memory = "1G"
  disk   = "5G"
  cloudinit_file = "${path.module}/config/srv-02.yml"
}

Chaque bloc resource décrit une VM : (nom de la machine, CPU, RAM, Disque, configuration cloud-init)

Créer les machines avec Terraform

Initialiser

Une fois votre configuration prête, il suffit d’exécuter :

bash
terraform init
terraform validate

init télécharge le provider et prépare le dossier ; validate vérifie la cohérence de notre configuration. Pour l'instant, aucune VM n'est créée.

Examiner le plan

bash
terraform plan

Plannification de la création des ressources

Appliquer

bash
terraform apply

Initialisation du project

Terraform recalcule un plan et demande confirmation. Relisez-le, puis saisissez yes si tout vous convient.

Après l'exécution :

bash
multipass list
multipass shell srv-01

Vous retrouvez votre instance, comme dans la première partie.

Félicitations ! Nous venons de créer nos deux machines à partir de leur description. Les accès et la communication réseau restent ceux de Multipass que nous avons déjà explorés.

Supprimer les VMs

Une fois vos tests terminés, récupérez les données utiles, puis lancez depuis le même dossier :

bash
terraform destroy

Terraform présente les ressources à supprimer et demande confirmation. Vérifiez qu'il s'agit bien de nos instances de test avant de répondre yes.

Conclusion

Notre exemple tient dans deux VM, mais le principe est là : nous décrivons les machines souhaitées, Terraform prépare les actions et Multipass les crée. Cette description reste dans nos fichiers, prête à être adaptée et réutilisée pour nos prochains labos.

Voilà, notre petit cloud local prend forme ! Pas besoin d’un compte chez un fournisseur cloud pour commencer à pratiquer Terraform : notre PC nous offre déjà un terrain d’essai.

Nous savons maintenant créer nos machines. Mais installer les mêmes outils sur chacune reste répétitif. Dans la prochaine partie, nous verrons comment Ansible peut s’en charger.

Victor Agbalenyo

Écrit par

Victor Agbalenyo

Ingénieur fullstack, architecte DevSecOps et ingénieur en énergies renouvelables. J'écris sur le cloud, la sécurité et l'énergie.