Slide 1

Slide 1 text

Gérer son infra avec son langage de programmation préféré* @ju_hnny5 Julien Briault - Deezer

Slide 2

Slide 2 text

Disclaimer 1 Ce talk a été réalisé avant le drama d’Hashicorp et la Business Source Licence. @ju_hnny5

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

Disclaimer 2 Aucun code Terraform ne sera maltraité. @ju_hnny5

Slide 5

Slide 5 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 Tourangeau perdu en Beauce … #Networking #FOSS #Dev #Music @ju_hnny5

Slide 6

Slide 6 text

@ju_hnny5 Le cloud du Coeur

Slide 7

Slide 7 text

@ju_hnny5

Slide 8

Slide 8 text

@ju_hnny5

Slide 9

Slide 9 text

Et oui, je ne dors pas beaucoup… @ju_hnny5

Slide 10

Slide 10 text

Retour aux sources

Slide 11

Slide 11 text

Dev - Ops @ju_hnny5

Slide 12

Slide 12 text

Agile + DevOps @ju_hnny5

Slide 13

Slide 13 text

Pet vs Cattle @ju_hnny5

Slide 14

Slide 14 text

"Infra is hard..." @ju_hnny5

Slide 15

Slide 15 text

Infra as Code ? @ju_hnny5

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

L’infra as Code ? @ju_hnny5 Stateful Stateless vs

Slide 20

Slide 20 text

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

Slide 21

Slide 21 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 22

Slide 22 text

"When devs want to do Ops". @ju_hnny5

Slide 23

Slide 23 text

https://www.youtube.com/watch?v=aZvsplOAd7c

Slide 24

Slide 24 text

On commence ?

Slide 25

Slide 25 text

Legacy solutions @ju_hnny5

Slide 26

Slide 26 text

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.

Slide 27

Slide 27 text

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é

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

@ju_hnny5 Le combat que tout oppose

Slide 31

Slide 31 text

@ju_hnny5 Le standard de facto

Slide 32

Slide 32 text

@ju_hnny5 Le petit nouveau*

Slide 33

Slide 33 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 34

Slide 34 text

Pulumi, Késako ? @ju_hnny5

Slide 35

Slide 35 text

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.

Slide 36

Slide 36 text

Pulumi, Késako ? @ju_hnny5

Slide 37

Slide 37 text

Pulumi, Project structure ? @ju_hnny5

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

Infra as Code : Apprendre de nouveau langages ? @ju_hnny5

Slide 40

Slide 40 text

DevXP @ju_hnny5

Slide 41

Slide 41 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 :

Slide 42

Slide 42 text

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

Slide 43

Slide 43 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"}], ) @ju_hnny5

Slide 44

Slide 44 text

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

Slide 45

Slide 45 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 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

DevXP : L’outillage L’IA au service du bien. @ju_hnny5 @ju_hnny5

Slide 49

Slide 49 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 50

Slide 50 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. @ju_hnny5

Slide 51

Slide 51 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 52

Slide 52 text

The CLI @ju_hnny5

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

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.

Slide 56

Slide 56 text

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

Slide 57

Slide 57 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. ● Gestion des politiques/contrôles d’accès. https://www.pulumi.com/docs/pulumi-cloud/self-hosted/components/console/ @ju_hnny5

Slide 58

Slide 58 text

Pulumi Cloud Console @ju_hnny5

Slide 59

Slide 59 text

Pulumi Cloud Console @ju_hnny5

Slide 60

Slide 60 text

@ju_hnny5 Pulumi ESC (Environment, Secrets and Configuration)

Slide 61

Slide 61 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 62

Slide 62 text

Terraform Bridge @ju_hnny5

Slide 63

Slide 63 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 64

Slide 64 text

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

Slide 65

Slide 65 text

Automation API @ju_hnny5

Slide 66

Slide 66 text

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

Slide 67

Slide 67 text

Community @ju_hnny5

Slide 68

Slide 68 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 69

Slide 69 text

Demo time ! @ju_hnny5

Slide 70

Slide 70 text

Démo 1 : Créer une première instance sur OpenStack (avec Python) @ju_hnny5

Slide 71

Slide 71 text

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

Slide 72

Slide 72 text

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

Slide 73

Slide 73 text

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

Slide 74

Slide 74 text

Démo 5 (bonus) : Convertir en code Pulumi @ju_hnny5

Slide 75

Slide 75 text

The cons @ju_hnny5

Slide 76

Slide 76 text

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

Slide 77

Slide 77 text

@ju_hnny5

Slide 78

Slide 78 text

One link: https://shorturl.at/kBE78 @ju_hnny5

Slide 79

Slide 79 text

& Q A

Slide 80

Slide 80 text

Thank you @ju_hnny5