Débutez avec Pulumi
Mise à jour :
Dans nos métiers, le provisionnement de l’infrastructure est devenue une partie essentielle du développement moderne. Les équipes de développement cherchent en permanence des moyens d’automatiser et de rationaliser la création, la configuration et la gestion de leurs ressources cloud. C’est là que l’infrastructure as code (IaC) entre en jeu et parmi les nombreux outils disponibles, Pulumi se distingue comme une solution puissante et polyvalente.
Qu’est-ce que Pulumi ?
Pulumi est bien plus qu’un simple outil d’infrastructure as code (IaC) ; il s’agit d’une plateforme complète qui vous permet de gérer votre infrastructure cloud à l’aide de langages de programmation familiers. Contrairement à de nombreux autres outils IaC, Pulumi n’est pas limité à un langage spécifique. Il prend en charge plusieurs langages populaires, notamment Python, TypeScript, Go, et bien d’autres. Cela signifie que vous pouvez écrire du code pour définir votre infrastructure en utilisant le langage que vous maîtrisez le mieux.
Pulumi vous offre également la possibilité de travailler avec de multiples fournisseurs de cloud, tels qu’Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP) et bien d’autres. Vous n’êtes donc pas lié à un fournisseur spécifique et pouvez déployer vos ressources sur la plateforme cloud qui correspond le mieux à vos besoins.
Concepts fondamentaux de Pulumi
Représentation déclarative
Pulumi adopte une approche déclarative pour la définition de l’infrastructure, ce qui signifie que vous spécifiez simplement l’état souhaité de votre infrastructure et Pulumi se charge de créer, mettre à jour ou supprimer les ressources pour atteindre cet état. Cette approche est plus intuitive que la programmation impérative, où vous devrez décrire les étapes pour atteindre l’état souhaité.
Stockage de l’état
Pulumi gère automatiquement l’état de votre infrastructure. Cela signifie qu’il garde une trace des ressources que vous avez créées, de leurs états actuels, et des dépendances entre elles. La gestion de l’état facilite la planification et l’exécution des mises à jour de votre infrastructure, tout en minimisant les risques d’incohérences.
Les Stacks
Un autre concept clé de Pulumi est celui des stacks. Les stacks vous permettent de gérer différents environnements, tels que ceux de développement, de pré-production et de production, en utilisant la même définition d’infrastructure.
Chaque stack a sa propre configuration, ce qui vous permet de déployer et de gérer votre infrastructure de manière cohérente, quelle que soit la phase l’environnement cible. Vous pouvez définir des variables spécifiques à chaque stack pour gérer les paramètres qui changent d’un environnement à l’autre.
La notion de plan et d’application des modifications
Avant d’appliquer des modifications à votre infrastructure, Pulumi génère un plan. Ce plan affiche les actions exactes que Pulumi va entreprendre pour mettre à jour votre infrastructure. Vous avez la possibilité de revoir le plan avant d’autoriser Pulumi à appliquer les modifications, ce qui vous permet de comprendre précisément ce qui va se passer.
Ce processus offre un niveau de sécurité supplémentaire, car il évite les modifications accidentelles ou non autorisées de votre infrastructure.
Gestion des dépendances entre les ressources
Lorsque vous définissez votre infrastructure en tant que code, il est courant d’avoir des dépendances entre différentes ressources. Par exemple, vous pourriez avoir besoin d’un serveur avant de créer une base de données qui lui est liée.
Pulumi gère automatiquement ces dépendances pour vous. Vous pouvez spécifier les dépendances entre les ressources dans votre code et Pulumi garantit que les ressources sont créées et mises à jour dans le bon ordre pour satisfaire ces dépendances.
Cela simplifie considérablement la gestion des infrastructures complexes, car vous n’avez pas à vous soucier de l’ordre d’exécution des opérations.
Installation de Pulumi
Pour commencer avec Pulumi, vous devrez installer l’outil sur votre système. L’installation est généralement simple et Pulumi est disponible pour les différentes plateformes, y compris Windows, macOS et Linux. Une fois installé, vous devrez configurer Pulumi pour qu’il utilise les informations d’authentification de votre fournisseur cloud.
Installation de Pulumi sur Linux
Dans une fenêtre de Terminal tapez la commande suivante :
Installation de Pulumi sur MacOS
Dans une fenêtre Terminal tapez la commande suivante :
Installation de Pulumi sur Windows
Dans une fenêtre Powershell tapez la commande suivante :
Vérification de l’installation de Pulumi
Dans une fenêtre terminal tapez la commande suivante :
Configuration de Pulumi
Le processus de configuration initiale peut varier en fonction de votre fournisseur de cloud, mais Pulumi fournit généralement des guides détaillés pour chacun d’eux. Assurez-vous de suivre ces guides pour configurer correctement votre environnement de développement. Exemple avec AWS ↗
Ecrire son premier code d’infrastructure avec Pulumi
Maintenant que nous avons une meilleure compréhension de ce qu’est Pulumi, plongeons plus profondément dans la manière dont vous pouvez définir votre infrastructure en tant que code avec cet outil puissant.
Utilisation du backend local
Pour éviter de créer un state dans le cloud de pulumi, je fais le choix d’utiliser le backend local :
Création de notre première VM
Pour mieux comprendre comment Pulumi fonctionne, commençons par créer un nouveau projet :
Pulumi nous propose de choisr parmi des templates existants. J’ai choisi
Aws-Python. Pulumi créé le nécessaire pour notre premier projet, avec un
environnement virtuel. Il nous invite à lancer la commande pulumi up
. Soyons
fou :
Mince, il propose de créer un premier bucket ! Regardons en détail le contenu du dossier :
On y retrouve donc :
Pulumi.dev.yaml
: contient la configuration de la pile que vous initialisezPulumi.yaml
: Définit le projet- main.py : contient un exemple de programme avec les importations Pulumi et définit les ressources du programme.
requirements.txt
: contient les exigences de la version Pulumi- un dossier
venv
contenant un environnement virtuel Python
Le contenu du fichier main.py
:
Dans cet exemple, nous importons les modules nécessaires de Pulumi et d’AWS,
puis nous créons un objet Bucket
en lui donnant un nom (“my-bucket”). Pulumi
se charge ensuite de créer le bucket S3 correspondant dans votre compte AWS
lorsque vous exécutez ce code.
On relance le provisionnement en répondant yes
cette fois :
Pulumi affiche en sortie le nom du bucket, Vérifions avec la CLI d’AWS si le bucket a bien été créé avec ce nom :
Je cherche la documentation sur ce provider AWS ↗. Chaque objet est largement détaillé avec pas mal d’exemples.
Je vois que je peux par exemple ajouter des tags. Je modifie le code.
Avant de modifier je vérifie les tags actuels :
Aucun tag. Je lance la mise à jour :
On voit bien la différence avec diff: tags...
Vérifions les tags maintenant :
Nickel. Chrome. On en reste là. Détruisons le tout.
Gestion des secrets
La sécurité et la gestion des secrets sont des aspects critiques de la gestion de l’infrastructure.
Pulumi reconnaît l’importance de la sécurité et offre des fonctionnalités intégrées pour gérer les informations sensibles telles que les mots de passe, les clés d’API, les jetons d’accès et d’autres données confidentielles.
Stockage sécurisé des secrets
Pulumi propose un coffre-fort de sécurité intégré qui permet de stocker de manière sécurisée les secrets, les clés API et autres données sensibles. Ces informations sont chiffrées au repos et lors de leur transmission.
Vous pouvez utiliser des variables secrètes dans votre code Pulumi pour accéder aux informations sensibles stockées dans le coffre-fort de sécurité. Ces variables ne sont jamais exposées en clair dans votre code ou dans les fichiers de configuration, ce qui renforce la sécurité de votre infrastructure.
Pulumi utilise des mécanismes de chiffrement solides pour garantir que vos secrets sont stockés en toute sécurité. Cela inclut le chiffrement des données en transit et au repos, ainsi que la gestion des clés de chiffrement.
Gestion des configurations spécifiques à chaque environnement
Outre la gestion des secrets, Pulumi vous permet de gérer des configurations spécifiques à chaque environnement. Cela signifie que vous pouvez personnaliser les paramètres de votre infrastructure en fonction de l’environnement dans lequel vous déploierez votre code.
Par exemple, vous pouvez avoir des configurations différentes pour le développement, la pré-production et la production. Pulumi vous permet de gérer ces configurations de manière centralisée et de les utiliser dans votre code.
Exemple d’utilisation de secrets et de configurations
Voici un exemple simple de la manière dont vous pouvez utiliser des secrets et des configurations dans votre code Pulumi :
On commence par créer un secret avec la CLI :
Utilisons le dans notre exemple précédent pour créer un Objet avec son contenu :
Dans cet exemple, nous utilisons pulumi.Config()
pour accéder aux
configurations spécifiques à l’environnement. Nous utilisons ensuite la fonction
config.require_secret
pour récuperer le secret. Ces éléments sont
ensuite utilisés pour créer un bucket S3 contenant un objet.
On lance la création :
On copie le fichier pour en voir le contenu :
C’est la bonne valeur. L’exemple n’est pas génial mais montre que Pulumi gère parfaitement les secrets.
Conclusion
J’espére que cette introduction sur Pulumi vous a aidé à débuter avec Pulumi. N’oubliez pas que Pulumi évolue constamment, alors tenez-vous au courant avec les dernières fonctionnalités et les meilleures pratiques pour en tirer le meilleur parti.
Plus d’infos
- Site Officiel : Pulumi ↗
- Le projet ↗ : Ce site propose le code source de Pulumi, ainsi que des exemples d’utilisation et des contributions de la communauté.