Slide 1

Slide 1 text

Ou comment gérer votre infrastructure avec votre langage préféré Alexis Fala - Deezer Idriss Neumann - Comwork Julien Briault - Deezer / Restos du Coeur

Slide 2

Slide 2 text

Disclaimer 1 🤯 Cette université a été préparée avant le drama d’Hashicorp et la Business Source Licence. @idriss_neumann/ @ju_hnny5

Slide 3

Slide 3 text

@idriss_neumann/ @ju_hnny5

Slide 4

Slide 4 text

@idriss_neumann/ @ju_hnny5 L’actualité …

Slide 5

Slide 5 text

https://www.youtube.com/watch?v=E_F71Niwq_8 @ju_hnny5

Slide 6

Slide 6 text

Disclaimer 2 😬 Aucun code Terraform ne sera maltraité. @ElFamosoKwak

Slide 7

Slide 7 text

~#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

Slide 8

Slide 8 text

~#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

Slide 9

Slide 9 text

@ju_hnny5 Le cloud du Coeur

Slide 10

Slide 10 text

@ju_hnny5

Slide 11

Slide 11 text

@ju_hnny5

Slide 12

Slide 12 text

~#whoami @ElFamosoKwak Alexis Fala Apprentice Infrastructure engineer / SRE chez Auteur à ses heures perdues sur deezer.io #SRE #Kube #PromptEngineer #Music

Slide 13

Slide 13 text

@idriss_neumann/ @ju_hnny5 @ElFamosoKwak

Slide 14

Slide 14 text

Merci @idriss_neumann/ @ju_hnny5 @ElFamosoKwak

Slide 15

Slide 15 text

Des questions ? Posez-les ici : 󰜼 https://slido.com 👀 #3847984 @ju_hnny5

Slide 16

Slide 16 text

La parole est à vous ! Des questions ?

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

@ju_hnny5

Slide 20

Slide 20 text

Retour aux sources

Slide 21

Slide 21 text

Dev - Ops @ju_hnny5

Slide 22

Slide 22 text

Concilier les inconciliables ? 󰷻 @ElFamosoKwak

Slide 23

Slide 23 text

Silotisation des équipes 😶 @ElFamosoKwak

Slide 24

Slide 24 text

Délais de déploiement 😬 @ElFamosoKwak

Slide 25

Slide 25 text

Complexité croissante 🤓 @ju_hnny5

Slide 26

Slide 26 text

Agile + DevOps @ElFamosoKwak

Slide 27

Slide 27 text

DevOps ce n’est pas un métier @ElFamosoKwak

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

Pet vs Cattle 👀 @ju_hnny5 / @ElFamosoKwak

Slide 30

Slide 30 text

"Infra is hard..." @ju_hnny5

Slide 31

Slide 31 text

Infra as Code ? 👀 @ElFamosoKwak

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

L’infra as Code ? 👀 @ju_hnny5 L’Infrastructure as Code apporte plusieurs bénéfices … Source : https://shorturl.at/aeoqO

Slide 34

Slide 34 text

Versioning 🤓 @ju_hnny5

Slide 35

Slide 35 text

Facilite les audits @ju_hnny5

Slide 36

Slide 36 text

Retour arrière @ju_hnny5

Slide 37

Slide 37 text

Shadow IT 🧐 @ju_hnny5

Slide 38

Slide 38 text

Infrastructure (configuration) Management L’infra as Code ? 🙂 @ju_hnny5 Infrastructure Provisioning =/=

Slide 39

Slide 39 text

L’infra as Code ? 🙂 Stateful Stateless vs @ElFamosoKwak

Slide 40

Slide 40 text

L’infra as Code ? 🙂 @ju_hnny5 Imperative Declarative vs Procedural Structured Object-oriented Functional Logic

Slide 41

Slide 41 text

@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 ? 🙂

Slide 42

Slide 42 text

“Quand les devs veulent faire de l’ops” 😅 @ElFamosoKwak / @idriss_neumann

Slide 43

Slide 43 text

https://www.youtube.com/watch?v=aZvsplOAd7c @ju_hnny5 Infra : Donnez de l’autonomie à vos développeurs avec OctoDNS

Slide 44

Slide 44 text

On commence (réellement) ? 🚀

Slide 45

Slide 45 text

Solutions historiques 🤓 @ElFamosoKwak

Slide 46

Slide 46 text

@ju_hnny5

Slide 47

Slide 47 text

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.

Slide 48

Slide 48 text

@ElFamosoKwak

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

@ju_hnny5

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

@idriss_neumann

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

@ju_hnny5 Turing Complete ? 😶

Slide 55

Slide 55 text

@ElFamosoKwak Le combat que tout oppose 😎

Slide 56

Slide 56 text

@ElFamosoKwak Le standard de facto 😏

Slide 57

Slide 57 text

@ju_hnny5 Le multi-envs ? +

Slide 58

Slide 58 text

Le multi-envs avec Terraform @ju_hnny5

Slide 59

Slide 59 text

Le travail concurrentiel avec Terraform ? @ju_hnny5 @ju_hnny5

Slide 60

Slide 60 text

@ElFamosoKwak / @idriss_neumann Le petit nouveau* 😎

Slide 61

Slide 61 text

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/

Slide 62

Slide 62 text

Pulumi Installation 😏 @ElFamosoKwak Installation toute simple : curl -fsSL https://get.pulumi.com | sh Plus d’informations ici : - https://www.pulumi.com/docs/install/

Slide 63

Slide 63 text

No content

Slide 64

Slide 64 text

@ju_hnny5 📄 Program ● un ensemble de fichiers écrits dans le langage de programmation choisi*.

Slide 65

Slide 65 text

📝 Project ● un répertoire contenant un programme, avec des métadonnées, afin que Pulumi sache comment l'exécuter. @ju_hnny5

Slide 66

Slide 66 text

󰜼 Stack ● une instance de votre projet, chacune correspondant souvent à un environnement cloud différent. @ju_hnny5

Slide 67

Slide 67 text

Pulumi, Project structure ? @ju_hnny5

Slide 68

Slide 68 text

Pulumi, Késako ? @ju_hnny5

Slide 69

Slide 69 text

Pulumi, Késako ? @ju_hnny5

Slide 70

Slide 70 text

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 !

Slide 71

Slide 71 text

Demo (x3) ! @ElFamosoKwak

Slide 72

Slide 72 text

Démo : Créons notre premier projet ! @ju_hnny5

Slide 73

Slide 73 text

Démo : Créer une première instance sur GCP (avec Python) et comparer avec Terraform @ju_hnny5 / @ElFamosoKwak

Slide 74

Slide 74 text

Démo : Jouons avec les templates ! @ju_hnny5

Slide 75

Slide 75 text

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.

Slide 76

Slide 76 text

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 : “”.

Slide 77

Slide 77 text

Démo : Jouons avec l’état ! @ju_hnny5

Slide 78

Slide 78 text

La parole est à vous ! Des questions ?

Slide 79

Slide 79 text

L’Infrastructure as Code, bah… c’est du code ! @ElFamosoKwak

Slide 80

Slide 80 text

Infra as Code : Apprendre de nouveau langages ? @ElFamosoKwak

Slide 81

Slide 81 text

DevXP @ju_hnny5

Slide 82

Slide 82 text

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

Slide 83

Slide 83 text

Démo : Créer des ressources (avec YAML) @ju_hnny5

Slide 84

Slide 84 text

DevXP : Les langages supportés 😏 https://marketsplash.com/tutorials/pulumi/pulumi-rust/ @ju_hnny5

Slide 85

Slide 85 text

DevXP : Les langages supportés 😏 https://marketsplash.com/tutorials/pulumi/pulumi-rust/ @ju_hnny5

Slide 86

Slide 86 text

No content

Slide 87

Slide 87 text

DevXP : Les langages supportés 😏 https://marketsplash.com/tutorials/pulumi/pulumi-rust/ @ju_hnny5

Slide 88

Slide 88 text

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

Slide 89

Slide 89 text

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

Slide 90

Slide 90 text

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

Slide 91

Slide 91 text

DevXP : L’outillage Source : https://shorturl.at/nHSV7 @ju_hnny5 / @idriss_neumann

Slide 92

Slide 92 text

DevXP : L’outillage Mode pour de la CICD (via l’option –non-interactive) directement intégré à la CLI Pulumi @ju_hnny5

Slide 93

Slide 93 text

On est en 2024 … 🦾 @ElFamosoKwak

Slide 94

Slide 94 text

DevXP : De l’IA 🦾 @ju_hnny5 @ElFamosoKwak

Slide 95

Slide 95 text

La modularité 😎 @ju_hnny5

Slide 96

Slide 96 text

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

Slide 97

Slide 97 text

Démo : La modularité au sein d’un projet Pulumi @ju_hnny5

Slide 98

Slide 98 text

La parole est à vous ! Des questions ?

Slide 99

Slide 99 text

Une couche d’abstraction 👀 @ElFamosoKwak

Slide 100

Slide 100 text

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

Slide 101

Slide 101 text

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'],

Slide 102

Slide 102 text

Démo : Créer des ressources en apportant une couche d’abstraction (avec Python) @ju_hnny5

Slide 103

Slide 103 text

La CLI 😯 @ElFamosoKwak

Slide 104

Slide 104 text

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

Slide 105

Slide 105 text

La CLI : pulumi @ju_hnny5

Slide 106

Slide 106 text

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

Slide 107

Slide 107 text

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.

Slide 108

Slide 108 text

Démo : Convertir du code Terraform en Pulumi @ju_hnny5

Slide 109

Slide 109 text

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

Slide 110

Slide 110 text

Démo : Migrer ses ressources Terraform vers Pulumi @ju_hnny5

Slide 111

Slide 111 text

La parole est à vous ! Des questions ?

Slide 112

Slide 112 text

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

Slide 113

Slide 113 text

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

Slide 114

Slide 114 text

Pulumi Cloud Console @ju_hnny5

Slide 115

Slide 115 text

Pulumi Cloud Console @ju_hnny5

Slide 116

Slide 116 text

Demo ! @ju_hnny5

Slide 117

Slide 117 text

@ju_hnny5 Pulumi ESC (Environment, Secrets and Configuration)

Slide 118

Slide 118 text

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

Slide 119

Slide 119 text

Terraform Bridge @ju_hnny5

Slide 120

Slide 120 text

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

Slide 121

Slide 121 text

Pulumi Terraform Bridge https://github.com/pulumi/pulumi-tf-provider-boilerplate @ju_hnny5

Slide 122

Slide 122 text

Automation API @idriss_neumann

Slide 123

Slide 123 text

Pulumi Automation API : Intégrations et workflows automatisés @idriss_neumann

Slide 124

Slide 124 text

Community @ElFamosoKwak

Slide 125

Slide 125 text

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

Slide 126

Slide 126 text

La parole est à vous ! Des questions ?

Slide 127

Slide 127 text

The cons @ElFamosoKwak

Slide 128

Slide 128 text

Pulumi, the cons Le Pulumi Terraform Bridge 😏 - Peut poser quelques complications très rapidement (souvent liées au provider source) @ju_hnny5

Slide 129

Slide 129 text

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

Slide 130

Slide 130 text

Pulumi, the cons La documentation - Très bien réalisée mais manque d’exemples - Peu de ressources si on compare à Terraform @ElFamosoKwak

Slide 131

Slide 131 text

Pulumi, the cons Le nombre de providers😕 @ElFamosoKwak Environ 4000 (sur la Registry) Environ 160 (sur la Registry)

Slide 132

Slide 132 text

Pulumi, the cons @ju_hnny5 Ne pas oublier le bridge ! 😜 Le nombre de providers😕

Slide 133

Slide 133 text

La parole est à vous ! Des questions ?

Slide 134

Slide 134 text

Le “DaaS” @idriss_neumann

Slide 135

Slide 135 text

Démo : Convertir son IaC en API et en véritable produit @idriss_neumann

Slide 136

Slide 136 text

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

Slide 137

Slide 137 text

La parole est à vous ! Des questions ?

Slide 138

Slide 138 text

@idriss_neumann Démo : Suite de l’IaC en tant que produit (partie 1)

Slide 139

Slide 139 text

@idriss_neumann Instant pub pause !

Slide 140

Slide 140 text

@idriss_neumann

Slide 141

Slide 141 text

@idriss_neumann

Slide 142

Slide 142 text

Le “DaaS” avec Pulumi et cwcloud @idriss_neumann

Slide 143

Slide 143 text

Démo : Suite de l’IaC en tant que produit (partie 2) @idriss_neumann

Slide 144

Slide 144 text

La parole est à vous ! Des questions ?

Slide 145

Slide 145 text

No content

Slide 146

Slide 146 text

@idriss_neumann / @ju_hnny5 / @ElFamosoKwak Laissez-nous un feedback !

Slide 147

Slide 147 text

@idriss_neumann / @ju_hnny5 / @ElFamosoKwak Comme nous sommes gentils, le code est ici …

Slide 148

Slide 148 text

& Q A

Slide 149

Slide 149 text

Thank you @idriss_neumann/ @ju_hnny5 / @ElFamosoKwak