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

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

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

Julien Briault

February 07, 2024
Tweet

More Decks by Julien Briault

Other Decks in Programming

Transcript

  1. Disclaimer 1 Ce talk a été réalisé avant le drama

    d’Hashicorp et la Business Source Licence. @ju_hnny5
  2. ~#whoami Julien Briault (ex) SecOps consultant chez IT/Infrastructure Manager (bénévole)

    aux Network Engineer / SRE chez Auteur principal sur blog.jbriault.fr Tourangeau perdu en Beauce … #Networking #FOSS #Dev #Music @ju_hnny5
  3. L’infra as Code ? @ju_hnny5 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
  4. L’infra as Code ? @ju_hnny5 L’Infrastructure as Code apporte plusieurs

    bénéfices : 1. Elle permet de gérer le versionning de l’infrastructure à l’aide de logiciels comme Git. 2. Le Shadow IT est réduit, c'est-à-dire l’ensemble des systèmes informatiques qui ne sont pas officiellement répertoriés. Source : https://shorturl.at/aeoqO
  5. @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 ?
  6. Legacy Solutions : 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.
  7. Legacy Solutions : Azure Bicep @ju_hnny5 Quelques désavantages : 1.

    La courbe d’apprentissage 2. N’est lié qu’à Microsoft Azure 3. La maturité 4. Ecosystème et la communauté
  8. Legacy Solutions : OpenStack Heat @ju_hnny5 Quelques désavantages : 1.

    La complexité au démarrage (lié principalement au DSL) 2. L’héritage de valeurs 3. Le système de modules
  9. Legacy Solutions : Terraform @ju_hnny5 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
  10. 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/
  11. Pulumi, Terminology ? @ju_hnny5 • Program: un ensemble de fichiers

    écrits dans le langage de programmation choisi. • Project: un répertoire contenant un programme, avec des métadonnées, afin que Pulumi sache comment l'exécuter. • Stack: une instance de votre projet, chacune correspondant souvent à un environnement cloud différent.
  12. Pulumi Installation @ju_hnny5 Installation toute simple : curl -fsSL https://get.pulumi.com

    | sh Plus d’informations ici : - https://www.pulumi.com/docs/install/
  13. 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 :
  14. 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"}], ) @ju_hnny5
  15. 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
  16. DevXP : L’outillage 1. Utiliser son environnement de dev préféré

    a. Pas besoin d’IDE ou de plugin spécifique pour Pulumi 2. Mode pour de la CICD (via l’option –non-interactive) directement intégré à la CLI Pulumi @ju_hnny5
  17. 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
  18. 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. @ju_hnny5
  19. 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'],
  20. The 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 @ju_hnny5
  21. The 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
  22. The CLI : Une migration facilitée @ju_hnny5 Une commande :

    pulumi convert \ –from terraform \ –language python \ –out pulumi Disponibles depuis la version v3.71.0.
  23. The 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
  24. 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. • Gestion des politiques/contrôles d’accès. https://www.pulumi.com/docs/pulumi-cloud/self-hosted/components/console/ @ju_hnny5
  25. 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
  26. 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
  27. 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
  28. Démo 2 : Créer une première instance sur OpenStack (avec

    Python) et comparer avec Terraform @ju_hnny5
  29. Démo 3 : Créer des ressources en apportant une couche

    d’abstraction (avec Python) @ju_hnny5
  30. Pulumi, the cons - Le Pulumi Terraform Bridge - Peut

    poser quelques complications très rapidement (souvent liées au provider source) - Très bien pour des petits projets mais peu rapidement devenir bordélique sur des projets de taille supérieure - Lié au langage de programmation utilisé et à la manière de structurer son code - La documentation - Le nombre de providers natifs @ju_hnny5