Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Pulumi : Gérer son infra avec son langage de programmation préféré

Pulumi : Gérer son infra avec son langage de programmation préféré

N’avez-vous jamais rêvé de pouvoir gérer votre infrastructure avec votre langage de programmation préféré ? D'exposer vos scripts de provisionnement et déploiement d'infrastructure comme un véritable service web moderne et utilisable par le plus grand nombre ?

Vous connaissez certainement Terraform ; Pulumi se positionne comme une alternative sérieuse à cette solution extrêmement populaire dans le domaine de l'infrastructure en tant que code (IaC).

Dans cette université nous vous proposons de découvrir ce challenger en mettant en lumière ses points forts comme la programmation multi-langages, la possibilité de mieux tester son code, d'avoir une couche d'abstraction multi-cloud plus efficace et même la capacité de réaliser de véritables applications web modernes de déploiement ...

Venez découvrir Pulumi, l'essayer et qui sait ? Peut-être l'adopter !

Julien Briault

April 18, 2024
Tweet

More Decks by Julien Briault

Other Decks in Technology

Transcript

  1. Ou comment gérer votre infrastructure avec votre langage préféré Alexis

    Fala - Deezer Idriss Neumann - Comwork Julien Briault - Deezer / Restos du Coeur
  2. Disclaimer 1 🤯 Cette université a été préparée avant le

    drama d’Hashicorp et la Business Source Licence. @idriss_neumann/ @ju_hnny5
  3. ~#whoami Idriss Neumann CEO chez comwork.io SRE / Platform Engineer

    freelance OSS contributor (contributeur quickwit grafana ds, falcosidekick, etc) Créateur de cwcloud: solution DaaS et FaaS pour accélérer les déploiements gitops et serverless cloud.comwork.io @idriss_neumann
  4. ~#whoami Julien Briault (ex) SecOps consultant chez IT/Infrastructure Manager (bénévole)

    aux Network Engineer / SRE chez Auteur principal sur blog.jbriault.fr #Networking #FOSS #Dev #Music @ju_hnny5
  5. ~#whoami @ElFamosoKwak Alexis Fala Apprentice Infrastructure engineer / SRE chez

    Auteur à ses heures perdues sur deezer.io #SRE #Kube #PromptEngineer #Music
  6. Le plan 1. Petit retour aux sources 2. Présentation des

    solutions historiques 3. Présentation de Pulumi 4. Comparaison avec Terraform (sans trash talk, promis) 😏 5. Pause (environ 20mn) 6. Démonstration live (d’abstraction) @ElFamosoKwak @idriss_neumann/ @ju_hnny5
  7. Les objectif 1. Université de “découverte” 2. Partir avec le

    bagage nécessaire pour l’adopter 3. Cette université doit être un échange avant tout ! 4. Partir de Terraform 😉 @ElFamosoKwak @idriss_neumann/ @ju_hnny5
  8. DevOps ? 🤩 1. Culture pour changement de culture organisationnelle

    2. Automation pour automatiser tout ce qui peut l’être (tâches répétitives, tests...) 3. Lean pour rationaliser un projet d’un bout à l’autre 4. Measurement pour mesurer un processus afin de pouvoir l’améliorer 5. Sharing pour le partage des mêmes objectifs par tous les acteurs d’un projet. @ElFamosoKwak
  9. L’infra as Code ? 👀 L’Infrastructure as Code (IaC) est

    une pratique qui consiste à gérer et à provisionner des infrastructures informatiques en utilisant des fichiers de définition. Source : https://shorturl.at/aeoqO @ElFamosoKwak
  10. L’infra as Code ? 👀 @ju_hnny5 L’Infrastructure as Code apporte

    plusieurs bénéfices … Source : https://shorturl.at/aeoqO
  11. @ju_hnny5 Imperative Declarative vs Step by step instructions Declare and

    result Create a server Add a server Make this change 2 servers L’infra as Code ? 🙂
  12. AWS CloudFormation @ju_hnny5 Quelques désavantages : 1. Complexité de la

    syntaxe 2. N’est lié qu’à AWS (obviously) 🤯 3. Limitation des modèles 4. Ressources orphelines a. Si une mise à jour de template n'inclut pas toutes les ressources existantes, certaines peuvent devenir "orphelines", c'est-à-dire qu'elles ne sont pas supprimées lors de la mise à jour, ce qui peut entraîner des coûts inattendus.
  13. Azure Bicep Quelques désavantages : 1. La courbe d’apprentissage 2.

    N’est lié qu’à Microsoft Azure 🤯 3. La maturité 4. Pas de “state” 5. Ecosystème et la communauté @ElFamosoKwak
  14. OpenStack Heat @ju_hnny5 Quelques désavantages : 1. La complexité au

    démarrage (lié principalement à la hiérarchie des valeurs en YAML) 😬
  15. Terraform Quelques désavantages : 1. La complexité au démarrage (lié

    principalement au DSL) 2. L’héritage de valeurs a. Le système de modules 😕 3. Lisible mais logique de dev difficilement applicable @idriss_neumann
  16. Pulumi, Késako ? @ju_hnny5 • La première version stable est

    sortie le 3 septembre 2019. ◦ Projet très jeune par rapport à Terraform sorti en 2014 • Projet écrit en Go(lang) • Possède une communauté large et active 😊 • Beaucoup de tooling fournit directement par l’outil ◦ Vs Terraform où beaucoup d’améliorations sont apportées par des outils tiers (exemple Terragrunt) • Pour bien commencer : ◦ https://www.pulumi.com/docs/get-started/
  17. Pulumi Installation 😏 @ElFamosoKwak Installation toute simple : curl -fsSL

    https://get.pulumi.com | sh Plus d’informations ici : - https://www.pulumi.com/docs/install/
  18. 📝 Project • un répertoire contenant un programme, avec des

    métadonnées, afin que Pulumi sache comment l'exécuter. @ju_hnny5
  19. 󰜼 Stack • une instance de votre projet, chacune correspondant

    souvent à un environnement cloud différent. @ju_hnny5
  20. Pulumi, Késako ? @ElFamosoKwak Créer son premier projet très facilement,

    de manière accompagnée. Utiliser des “templates” pour aller encore plus vite !
  21. Démo : Créer une première instance sur GCP (avec Python)

    et comparer avec Terraform @ju_hnny5 / @ElFamosoKwak
  22. Pulumi, le stockage de l’état ? 😊 @ElFamosoKwak • Par

    défaut, sur Terraform, l’état est stocké dans le fichier terraform.tfstate (localement) • Dans Pulumi, par défaut, le fichier d’état est stocké dans la Cloud Console.
  23. Pulumi, le stockage de l’état ? 😊 @ju_hnny5 • Possible

    de stocker les fichiers d’état dans un bucket type S3 ou GCS. ⚠ Si vous ne définissez pas un mot de passe à votre stack (à l’init), les identifiants stockés dans le fichier de state seront accessible avec la clé de la stack, soit : “”.
  24. DevXP : Les langages supportés 😍 A l’inverse de Terraform

    qui propose d’utiliser son DSL, Pulumi propose un SDK permettant d’utiliser plusieurs langages comme : @ju_hnny5 / @idriss_neumann
  25. DevXP : Le code 🤩 Terraform HCL Pulumi Python resource

    "openstack_compute_instance_v2" "basic" { name = "basic" image_name = "Ubuntu Server 22.04" flavor_name = "m1.small" key_pair = "jbriault" security_groups = ["default"] network { name = "tenant_network" } } instance = openstack.compute.Instance("basic", flavor_name="m1.small", image_name="Ubuntu Server 22.04", key_pair="jbriault", security_groups=["default"], networks=[{"name": "tenant_network"}], ) @ElFamosoKwak
  26. DevXP : Les langages supportés 🤓 Des ressources intéressantes :

    - https://www.pulumi.com/docs/concepts/vs/terraform/ - https://www.youtube.com/watch?v=PqAP4BunQZU @ju_hnny5
  27. DevXP : L’outillage 󰜼 Utiliser son environnement de dev préféré

    1. Pas besoin d’IDE ou de plugin spécifique pour Pulumi @ju_hnny5 / @idriss_neumann
  28. DevXP : L’outillage Mode pour de la CICD (via l’option

    –non-interactive) directement intégré à la CLI Pulumi @ju_hnny5
  29. DevXP : La modularité 😎 1. Vous pouvez organiser votre

    code en modules réutilisables, ce qui facilite la création et la gestion de configurations d'infrastructure complexes. 2. Vous pouvez facilement découper votre code sous forme de modules ou non (à l’inverse de Terraform qui n’offre qu’un système de modules). 3. Pas besoin d’outil comme terragrunt pour hériter de valeurs. @ju_hnny5
  30. DevXP : Une couche d’abstraction 󰷻 Pulumi permet d’utiliser les

    mécanismes de chaque langage. Ainsi il est aisé d’apporter de l’abstraction sur certains éléments de son infrastructure. 🤯 @ElFamosoKwak
  31. DevXP : Une couche d’abstraction https://github.com/juhnny5/pulumi-fortigate-example @ju_hnny5 # TCP port

    range myport: type: "TCP" # or UDP/SCTP port_range: "223-332" visibility: "enable" category: "General" ssh_port: type: "TCP" port_range: "22-22" visibility: "enable" category: "General" Exemple, créer des objets sur un pare-feu FortiGate : for key, value in content_services.items(): if value['type'] == 'TCP': serviced = forti.FirewallServiceCustom( key, app_service_type="disable", category="General", check_reset_range="default", color=0, helper="auto", iprange="0.0.0.0", name=key, protocol="TCP/UDP/SCTP", protocol_number=6, proxy="disable", tcp_halfclose_timer=0, tcp_halfopen_timer=0, tcp_portrange=value['port_range'], tcp_timewait_timer=0, udp_idle_timer=0, visibility=value['visibility'], ) elif value['type'] == 'UDP': serviced = forti.FirewallServiceCustom( key, app_service_type="disable", category="General", check_reset_range="default", color=0, helper="auto", iprange="0.0.0.0", name=key, protocol="TCP/UDP/SCTP", protocol_number=6, proxy="disable", udp_halfclose_timer=0, udp_halfopen_timer=0, udp_portrange=value['port_range'], udp_timewait_timer=0, udp_idle_timer=0, visibility=value['visibility'], ) elif value['type'] == 'SCTP': serviced = forti.FirewallServiceCustom( key, app_service_type="disable", category="General", check_reset_range="default", color=0, helper="auto", iprange="0.0.0.0", name=key, protocol="TCP/UDP/SCTP", protocol_number=6, proxy="disable", sctp_halfclose_timer=0, sctp_halfopen_timer=0, sctp_portrange=value['port_range'],
  32. La CLI : pulumi Une seule ligne de commande pour

    tout contrôler. 🤩 Verbes différents de ceux de Terraform. • Liste disponible ici : https://www.pulumi.com/docs/concepts/vs/terraform/terminolo gy/#commands @ElFamosoKwak
  33. La CLI : pulumi Exemples Afficher les modifications à apporter

    : pulumi preview terraform plan Appliquer les modifications : pulumi update terraform apply Détruire les ressources : pulumi destroy terraform destroy @ju_hnny5
  34. La CLI : Une migration facilitée @ju_hnny5 Une commande :

    pulumi convert \ –from terraform \ –language python \ –out pulumi Disponibles depuis la version v3.71.0.
  35. La CLI : Une migration facilitée Migrer ses ressources :

    pulumi import --from terraform ./terraform.tfstate Quelques ressources pour aider à la migration : - Migration Hub - https://www.pulumi.com/blog/migration-hub/ - https://www.pulumi.com/migrate/ @ju_hnny5
  36. Pulumi Cloud Console • Gestion de l’état de déploiement et

    des secrets dans Pulumi Cloud par défaut. 🤯 • Permet l’exécution à distance des déploiements. • S’intègre avec votre CI/CD. 🤩 https://www.pulumi.com/docs/pulumi-cloud/self-hosted/components/console/ @ElFamosoKwak
  37. Pulumi Cloud Console • Gestion des politiques/contrôles d’accès. 🫡 •

    Gestion concurrentielle (à plusieurs/en parallèle) du travail (bye bye (run)Atlantis 󰗞) https://www.pulumi.com/docs/pulumi-cloud/self-hosted/components/console/ @ju_hnny5
  38. Pulumi ESC • Permet aux équipes d'agréger des secrets et

    des configurations provenant de nombreuses sources, de gérer des collections hiérarchiques de configurations et de secrets ("environnements"), et de consommer ces configurations et secrets à partir d'une variété de services d'infrastructure et d'application différents. • Peut fonctionner avec mais aussi sans Pulumi. https://www.pulumi.com/docs/esc/get-started/ @ju_hnny5
  39. Pulumi Terraform Bridge Exemple : https://github.com/juhnny5/pulumi-maas-python @ju_hnny5 Adapter n’importe quel

    provider Terraform (construit à l’aide du Terraform Plugin SDK) en provider Pulumi. Les providers Terraform font des opérations CRUD*, il est donc “facile” de les transposer en provider Pulumi. *Create, Read, Update, Delete
  40. Community @ju_hnny5 • https://slack.pulumi.com/ • https://github.com/pulumi • https://twitter.com/PulumiCorp • Calendrier

    des conférences / Meetup : https://docs.google.com/sprea dsheets/d/1TXphpxOOJN87ptH 39JdSv32nzoTpBmhE2HhOGUA E4yw/edit
  41. Pulumi, the cons Le Pulumi Terraform Bridge 😏 - Peut

    poser quelques complications très rapidement (souvent liées au provider source) @ju_hnny5
  42. Pulumi, the cons Sans définition de guide lines, ça devient

    vite le bordel : - Pas directement lié à l’outil mais à la manière de développer - Favoriser les projets bien structurés - Conviendra mieux aux développeurs au démarrage qu’à un Ops (qui ne fait quasiment pas de dev) @ju_hnny5
  43. Pulumi, the cons La documentation - Très bien réalisée mais

    manque d’exemples - Peu de ressources si on compare à Terraform @ElFamosoKwak
  44. Pulumi, the cons Le nombre de providers😕 @ElFamosoKwak Environ 4000

    (sur la Registry) Environ 160 (sur la Registry)
  45. Le “DaaS” avec Pulumi et cwcloud “DaaS” pour “Deployment as

    a service” Transforme l’IaC/gitops en API et service, ce qui permet de considérablement accélérer sa mise en place Grâce à la capacité d'abstraction fournie par chaque langage, rends plus facile la création d’API et CLI agnostiques @idriss_neumann