Pulumi est un outil IaC (Infrastructure as Code) open-source pour concevoir, déployer et gérer des ressources sur une infrastructure de cloud. L'outil prend en charge de nombreux fournisseurs de clouds publics, privés et hybrides, tels que AWS, Azure, Google Cloud, Kubernetes, phoenixNAP Bare Metal Cloud et OpenStack.
Pulumi est utilisé pour créer des éléments d'infrastructure traditionnels tels que des machines virtuelles, des réseaux et des bases de données. L'outil est également utilisé pour concevoir des composants de cloud modernes, notamment des conteneurs, des clusters et des fonctions sans serveur.
Alors que Pulumi propose des langages de programmation impératifs, on peut utiliser l'outil pour une IaC déclarative. L'utilisateur définit l'état souhaité de l'infrastructure, et Pulumi construit les ressources demandées.
Terraform est un outil IaC open-source populaire pour la construction, la modification et la gestion des versions de l'infrastructure virtuelle.
Cet outil est utilisé par tous les principaux fournisseurs de cloud. Terraform est utilisé pour tout provisionner, des composants de bas niveau, tels que le stockage et la mise en réseau, aux ressources haut de gamme telles que les entrées DNS. La création d'environnements avec Terraform est conviviale et efficace. Les utilisateurs peuvent également gérer des environnements multi-clouds ou multi-offres avec cet outil.
Pour utiliser Terraform, un développeur doit apprendre un langage spécifique au domaine (DSL) appelé Hashicorp Configuration Language (HCL). Le HCL a la réputation d'être facile à utiliser au début mais difficile à maîtriser.
En revanche, Pulumi permet aux développeurs d'utiliser des langages à usage général tels que JavaScript, TypeScript, .Net, Python et Go. Les langages familiers permettent des constructions familières, telles que les boucles for, les fonctions et les classes. Toutes ces fonctionnalités sont également disponibles avec les HCL, mais leur utilisation nécessite des solutions de contournement qui compliquent la syntaxe.
L'absence d'un langage spécifique à un domaine est le principal argument de vente de Pulumi. En permettant aux utilisateurs de s'en tenir à ce qu'ils connaissent, Pulumi réduit le code passe-partout et encourage les meilleures pratiques de programmation.
Avec Terraform, les fichiers d'état sont par défaut stockés sur le disque dur local dans le fichier terraform.tfstate. Avec Pulumi, les utilisateurs s'inscrivent pour un compte gratuit sur le site officiel, et les fichiers d'états sont stockés en ligne.
En permettant aux utilisateurs de stocker des fichiers d'état via un compte gratuit, Pulumi offre de nombreuses fonctionnalités. Il existe un aperçu détaillé de toutes les ressources, et les utilisateurs ont un aperçu de l'historique de leur déploiement. Chaque déploiement fournit une analyse des détails de la configuration. Ces fonctionnalités permettent des activités de gestion, de visualisation et de surveillance efficaces.
Les fichiers d'état aident les outils IaC à mettre en correspondance les exigences de configuration avec les ressources du monde réel.
Pour bénéficier d'avantages similaires avec Terraform, on doit s'éloigner de la configuration par défaut du disque dur local. Les petites équipes comptant jusqu'à cinq utilisateurs peuvent obtenir une version gratuite de Terraform Cloud.
Une fois l'infrastructure définie, Terraform guide les utilisateurs vers la configuration déclarative souhaitée. Le code est toujours propre et court. Les problèmes surviennent lorsqu’on essaye de mettre en œuvre certaines situations conditionnelles, car la HCL est limitée à cet égard.
Pulumi permet aux utilisateurs d'écrire du code avec un langage de programmation standard, de nombreuses méthodes sont donc disponibles pour atteindre les paramètres souhaités.
Terraform permet aux utilisateurs de diviser les projets en plusieurs fichiers et modules afin de créer des composants réutilisables. Terraform permet également aux développeurs de réutiliser des fichiers de code pour différents environnements et objectifs.
Pulumi structure l'infrastructure sous la forme d'un projet monolithique ou de micro-projets. Des piles différentes agissent comme des environnements différents. Lors de l'utilisation d'extensions Pulumi de niveau supérieur qui correspondent à plusieurs ressources, il n'y a aucun moyen de désérialiser les références de la stack en ressources.
Lorsqu'on utilise un outil IaC, il est inévitable de rencontrer un état corrompu ou incohérent. Un crash provoque généralement un état incohérent lors d'une mise à jour, un bogue ou une dérive causée par un mauvais changement manuel.
Comme Pulumi utilise des langages de programmation courants, l'outil prend en charge les tests unitaires avec n'importe quel framework supporté par le langage logiciel choisi par l'utilisateur. Pour les intégrations, Pulumi ne prend en charge que l'écriture de tests en Go.
Terraform ne propose pas de support officiel pour les tests. Pour tester un environnement IaC, les utilisateurs doivent compter sur des bibliothèques tierces comme Terratest et Kitchen-Terraform.
Pulumi permet aux utilisateurs de déployer des ressources vers le cloud à partir d'un appareil local. Par défaut, Terraform requiert l'utilisation de sa plateforme SaaS pour déployer des composants dans le cloud.
Si un utilisateur souhaite déployer des ressources depuis un appareil local avec Terraform, les variables AWS_ACCESS_KEY et AWS_SECRET_ACCESS_KEY doivent être ajoutées à l'environnement Terraform Cloud. Ce processus ne correspond pas naturellement aux comptes SSO fédérés d'AWS. Les problèmes de sécurité liés à l'accès d'un système tiers à votre cloud sont également à noter.
La solution de contournement courante consiste à utiliser Terraform Cloud uniquement pour stocker les informations d'état. Cette option se fait toutefois au détriment d'autres fonctionnalités de Terraform Cloud.
Comparée à Terraform, la documentation officielle de Pulumi est encore limitée. Les meilleures ressources pour cet outil sont les exemples trouvés sur GitHub et sur le Slack de Pulumi.
La taille de la communauté joue également un rôle important en termes de ressources utiles. Terraform est un outil IaC largement utilisé depuis des années, et sa communauté s'est développée avec sa popularité. La communauté de Pulumi est encore loin d'atteindre cette taille.
Pulumi permet de consommer l'état de Terraform local ou distant à partir des programmes Pulumi. Cela facilite l'adoption progressive, en permettant de continuer à gérer un sous-ensemble de l’infrastructure avec Terraform, tout en passant progressivement à Pulumi.