Découverte de l’IaC avec Pulumi
Bonjour à tous, j’espère que vous allez bien ! Aujourd’hui, on va découvrir ensemble deux concepts essentiels : l’Infrastructure as Code (IaC) et l’outil Pulumi. Si ces termes vous semblent flous, pas d’inquiétude, je vais tout vous expliquer !
Infrastructure as Code (IaC)
L’IaC, ou Infrastructure as Code, consiste à déployer et gérer de l’infrastructure (par exemple des VMs, des conteneurs, des réseaux, des buckets S3, etc.) à travers du code. Cette approche permet non seulement de versionner l’infrastructure mais aussi de la tester, de la déployer de manière reproductible, et de mieux la documenter.
C’est vraiment pratique, car soyons honnêtes : qui ici n’a jamais passé des heures à créer manuellement des VMs, les configurer, les monitorer, les sauvegarder, etc.? C’est long, fastidieux, et pas vraiment amusant. L’IaC permet d’automatiser tout cela en un rien de temps.
En général, un déploiement IaC commence par l’écriture du code. Un administrateur ou un ingénieur DevOps définit ce qu’il souhaite déployer, comme une architecture sur Azure comprenant un groupe de ressources, un réseau virtuel (VNet), et deux VMs. Ce fichier est ensuite poussé dans un dépôt Git, où se trouvent aussi des pipelines CI/CD pour tester le code et valider son bon fonctionnement. Cela peut, par exemple, éviter de supprimer par erreur des ressources en production. Si tout est correct, le pipeline valide alors le déploiement de l’infrastructure de manière sécurisée et contrôlée.
Un autre concept clé en IaC est l’idempotence. L’idempotence garantit que si l’on redéploie une infrastructure déjà existante, rien ne change inutilement. Par exemple, si une VM est déjà déployée, le code ne doit pas en créer une nouvelle ; au lieu de cela, il vérifie l’état actuel de l’infrastructure, déploie ce qui manque et supprime ce qui est en trop.
Grâce à l’IaC, on peut exploiter tous les avantages connus du développement logiciel, comme le versionnage, le test, et le déploiement automatisé (CI/CD). Avec Pulumi, vous pouvez explorer toutes ces possibilités et profiter d’une infrastructure flexible et robuste.
Car cela ne s’arrête pas là : l’IaC permet aussi de réduire les coûts. En effet, en déployant des ressources uniquement quand elles sont nécessaires, on évite de payer pour des ressources inutilisées. Cela permet aussi de réduire les erreurs humaines et de gagner du temps. Enfin, l’IaC permet de documenter l’infrastructure de manière claire et précise, ce qui est très utile pour les nouveaux arrivants dans une équipe.
Pulumi
Alors, Pulumi, c’est quoi au juste ?
Pulumi est un outil qui permet de faire de l’IaC avec n’importe quel langage de programmation, ce qui signifie que vous pouvez écrire votre infrastructure en utilisant votre langage préféré, que ce soit Python, Go, TypeScript, ou d’autres. Bien sûr, Pulumi n’est pas le seul dans le monde de l’IaC. Terraform est également très populaire, mais l’avantage de Pulumi est de permettre une flexibilité totale dans le choix du langage, ce qui est l’une de ses grandes forces.
Dans cet article, nous allons découvrir Pulumi en déployant une infrastructure sur Azure.
Si vous ne connaissez pas encore Azure, ne vous inquiétez pas ! Je vous expliquerai tout cela dans un autre article.
Installation de Pulumi et Prérequis
Petite précision avant de commencer : bien que je sois sous Windows, j’utilise WSL, donc ce guide sera utile pour Linux et très similaire pour macOS. Si vous êtes sur Windows, je vous conseille aussi d’installer WSL : c’est vraiment pratique.
Pour installer Pulumi, il suffit de se rendre sur le site officiel et de télécharger le binaire correspondant à votre OS. Dans mon cas, je suis sous Debian 12. La documentation officielle recommande simplement cette commande pour l’installation :
curl -fsSL https://get.pulumi.com | sh
Une fois que vous avez lancé cette commande, vous pouvez en profiter pour prendre une gorgée de café. L’installation terminée, tapez :
pulumi about
et vous devriez voir une sortie similaire à celle-ci :
Nous avons maintenant Pulumi d’installé et prêt à l’emploi. Avant de nous lancer dans le code, quelques prérequis sont nécessaires pour un déploiement sur Azure : il faut un compte Azure actif ainsi que le CLI d’Azure installé et python3 d’installe aussi. Pour vous aider sur l’installation du azure-cli, la documentation officielle peut vous aider.
Premier Code avec Pulumi
Avec les prérequis installés, nous allons écrire notre premier code. Pour commencer, créons un dossier et initialisons un projet Pulumi avec la commande suivante :
mkdir Pulumi && cd Pulumi
pulumi new azure-python
Ici, Pulumi nous demande de nous connecter à un compte. Oui, cela peut surprendre, mais cela permet de sauvegarder les projets sur le cloud sans partager votre code avec des tiers.
Une fois connecté, Pulumi demande le nom du projet et celui de la stack, autrement dit l’environnement dans lequel vous souhaitez déployer votre code. Vous pouvez conserver les valeurs par défaut pour l’instant, c’est-à-dire Project et Dev. Pulumi initialise alors son environnement, créant un environnement virtuel Python (nécessitant Python et pip). Il génère un fichier __main__.py
qui contiendra le code de votre projet.
L’arborescence de votre projet devrait ressembler à ceci :
root@pcmakhal:/home/mohamad/Documents/Pulumi# tree -L 1
.
|-- Pulumi.dev2.yaml
|-- Pulumi.yaml
|-- __main__.py
|-- requirements.txt
`-- venv
Ces fichiers sont essentiels au projet. Le fichier __main__.py
contient le code, Pulumi.yaml
stocke les informations générales du projet, et Pulumi.dev2.yaml
garde les détails de l’environnement initialisé. Si vous avez besoin de dépendances supplémentaires, vous pourrez les ajouter dans le fichier requirements.txt
. En cas de suppression du dossier venv
, il est également possible de recréer l’environnement virtuel.
Dans le fichier Pulumi.dev2.yaml
, si vous souhaitez changer le nom de l’environnement, du provider, ou de la région de déploiement (par défaut sur West US
), c’est possible en modifiant cette configuration :
config:
azure-native:location: WestUS2
Code de l’Infrastructure
Lorsqu’on utilise la stack Azure par défaut de Pulumi, on obtient un code qui crée un groupe de ressources et un compte de stockage. Voici un exemple de ce code :
"""Un programme Pulumi pour Azure avec Python"""
import pulumi
from pulumi_azure_native import storage
from pulumi_azure_native import resources
# Créer un groupe de ressources Azure
resource_group = resources.ResourceGroup("resource_group")
# Créer un compte de stockage Azure
account = storage.StorageAccount(
"sa",
resource_group_name=resource_group.name,
sku={
"name": storage.SkuName.STANDARD_LRS,
},
kind=storage.Kind.STORAGE_V2,
)
# Exporter la clé primaire du compte de stockage
primary_key = (
pulumi.Output.all(resource_group.name, account.name)
.apply(
lambda args: storage.list_storage_account_keys(
resource_group_name=args[0], account_name=args[1]
)
)
.apply(lambda accountKeys: accountKeys.keys[0].value)
)
pulumi.export("primary_storage_key", primary_key)
Le code est en Python, ce qui le rend très parlant. On importe les modules nécessaires, crée un groupe de ressources et un compte de stockage, puis on exporte la clé primaire du compte pour la récupérer après le déploiement. Ce code, bien que simple, déploie efficacement et rapidement une infrastructure sur Azure.
Déploiement de l’Infrastructure
Pour déployer avec Pulumi, il suffit d’exécuter cette commande :
pulumi up
Vous verrez une sortie semblable à celle-ci :
En seulement 60 secondes, l’infrastructure est déployée sur Azure. Rendez-vous sur le portail Azure pour vérifier la création du groupe de ressources et du compte de stockage :
Suppression de l’Infrastructure
Enfin, pour détruire cette infrastructure, lancez simplement :
pulumi destroy
Ce qui donnera une sortie similaire à celle-ci :
Voilà ! Vous avez déployé puis supprimé une infrastructure sur Azure avec Pulumi.
Conclusion
Voilà, dans cet article nous avons exploré l’IaC avec Pulumi et déployé notre première infrastructure sur Azure. J’espère que cet article vous a été utile et que vous avez appris quelque chose de nouveau. Si vous avez des questions, n’hésitez pas à me les poser, je serai ravi d’y répondre.