Slide 1

Slide 1 text

Comment écrire son Infrastructure as Code ?

Slide 2

Slide 2 text

Présentation IaC - WeSpeakCloud WeScale La transmission et le partage des connaissances font intégralement partie de nos valeurs chez WeScale. C’est pour cela que nous avons décidé d'organiser, les #WeSpeakCloud, une série d'événements gratuits où nous pourrons apprendre et discuter ensemble sur des sujets actuels qui constituent les technologies et l'environnement Cloud.

Slide 3

Slide 3 text

● Sébastien Lavayssière Lancement IaC - WeSpeakCloud Le présentateur

Slide 4

Slide 4 text

Cette session des WeSpeakCloud a pour objectif de présenter mon point de vue sur l’Infrastructure as Code. Nous parlerons des erreurs à éviter et des bonnes pratiques à suivre. Enfin je proposerai enfin un ensemble de règles à suivre pour utiliser au mieux cet outils. Objectifs de cette session IaC - WeSpeakCloud Infrastructure as Code

Slide 5

Slide 5 text

L’”Infrastructure as Code” c’est l’ensemble du code source permettant de créer, tester, modifier, mettre à jour et supprimer une infrastructure et ses applications avec ou sans intervention humaine et de l’ensemble des outils permettant sa mise en oeuvre. Définition IaC - WeSpeakCloud Tentative

Slide 6

Slide 6 text

Erreurs à éviter ou toutes les angoisses du consultant...

Slide 7

Slide 7 text

Ces erreurs sont des exemples de ce que j’ai pu relever lors de mes audits. Ils peuvent vous paraître exagéré… et certains le sont ! N’hésitez pas à intervenir si vous n’êtes pas d’accord... Erreur #0 - Explication IaC - WeSpeakCloud Présentation

Slide 8

Slide 8 text

Cette première erreur est la plus fréquente ! Elle consiste à avoir autant de répertoire de code que de plateformes. Par exemple : - un repository pour la plateforme de développement, un pour la recette, un pour la pré-production et un pour la production... Erreur #1 IaC - WeSpeakCloud Copier - coller

Slide 9

Slide 9 text

Vous vous retrouvez à gérer au final “X” plateformes complètements différentes. “Cela marche en dev” VS “Cela ne marche pas en recette” Vous devez tout re-développer tout le temps. Erreur #1 - Pourquoi c’est une erreur ? IaC - WeSpeakCloud Copier - coller

Slide 10

Slide 10 text

Le code de l’infrastructure a été écrit sur un serveur (on espère avec des backups) par exemple sur un bastion. Le code est sauvé dans Git une fois par semaine. Erreur #2 IaC - WeSpeakCloud Ne pas versionner son code

Slide 11

Slide 11 text

Quelle est la version en production, UAT ou dev ? S’il faut rollbacker son application et revenir à une infrastructure précédente… Quel changement a été fait pour que mon code ne marche plus ? Erreur #2 - Pourquoi c’est une erreur ? IaC - WeSpeakCloud Ne pas versionner son code

Slide 12

Slide 12 text

Ne pas tester les mises à jour et rolling out… J’écris mon code directement sur la plateforme d’intégration des développeurs Après avoir écrit mon code en développement, je mets directement à jour la plateforme de recette. Pas de sanity check ? Erreur #3 IaC - WeSpeakCloud Tester c’est douter Merci CommitStrip !

Slide 13

Slide 13 text

Les cas de production sont-ils bien pris en compte ? Mais ma plateforme en fait, elle marche ? J’impacte fortement le travail des autres... Erreur #3 - Pourquoi c’est une erreur ? IaC - WeSpeakCloud Tester c’est douter Merci CommitStrip !

Slide 14

Slide 14 text

Ne pas gérer l’idempotence de son code. Ne pas tester l’idempotence de son code. Ne pas gérer ou tester l’idempotence entre les versions du code…. Erreur #4 IaC - WeSpeakCloud Idempotence ?

Slide 15

Slide 15 text

Erreur #4 - Définition IaC - WeSpeakCloud Idempotence ? Merci au blog: https://learningtotest.blog

Slide 16

Slide 16 text

C’est un des objectif de l’IaC: pouvoir réparer son infrastructure. Si mon code n’est pas idempotent, comment je mets à jour ma production ? Faire un Blue/Green pour chaque MEP ? Je ne peux pas itérer facilement pendant mon développement. Erreur #4 - Pourquoi c’est une erreur ? IaC - WeSpeakCloud Idempotence ?

Slide 17

Slide 17 text

Je lance avec ce job la création de mes vms, et avec celui là le déploiement et avec un autre le sanity check… Les conditions sont gérées par la personne qui lance le code, il a la connaissance… Erreur #4 IaC - WeSpeakCloud Ne pas écrire du code

Slide 18

Slide 18 text

La complexité de votre lancement d’infrastructure se retrouve dans une documentation - au mieux ! Ou au pire dans la mémoire d’un ou deux développeurs. Vous devenez très dépendant de votre outils de CD, en cas d’évolution ou d’erreur, pouvez vous toujours relancer vos plateformes ? Retour sur la nécessité de versionner son code... Erreur #4 - Pourquoi c’est une erreur ? IaC - WeSpeakCloud Ne pas écrire du code

Slide 19

Slide 19 text

Chacune de mes plateformes est une branche Git ! Erreur #5 IaC - WeSpeakCloud GitOps

Slide 20

Slide 20 text

Cf la première erreur… J’ai du code différent pour chaque branche. Qu’est ce que j’ai testé en recette ou pré-production ? Pas le même code qu’en production - erreur de merge / rebase. Mais comment je gère mes différentes configurations ? Erreur #5 - Pourquoi c’est une erreur ? IaC - WeSpeakCloud GitOps

Slide 21

Slide 21 text

La boîte à outils quelles technos j’utilise ?

Slide 22

Slide 22 text

Dans les slides suivants nous allons parcourir quelques outils pour la gestion de l’IaC… La liste n’est ni exhaustive ni discriminante, la bonne réponse dépend du cas client. Outils utiles pour l’IaC IaC - WeSpeakCloud Liste non exhaustive

Slide 23

Slide 23 text

● Terraform ● Cloud Formation ● Deployment Manager ● autres… (hors cloud) Création d’infrastructure IaC - WeSpeakCloud Dans le Cloud

Slide 24

Slide 24 text

● Conteneur : Docker, rkt ● Package : apt, yum,... ● Archive : zip to aws s3, gcp gcs (cas du serverless en particulier) ● Cloud style : image, AMI, ISO ● Industrialisé : Nexus... Packaging applicatif IaC - WeSpeakCloud Stocker son application versionnée (post CI)

Slide 25

Slide 25 text

● Conteneur : Kubernetes, Docker-Compose (hors prod) ● Package ou Archive : Ansible, Puppet, Bash ● Cloud Like ou serverless : via Terraform Déploiement applicatif IaC - WeSpeakCloud Vers le runtime

Slide 26

Slide 26 text

Mon conseil, utiliser Python : ● probablement le plus simple ● probablement connu de vos Ops et de vos devs ● probablement le plus complet dans le domaine Pour lier les outils IaC - WeSpeakCloud et dans les ténèbres….

Slide 27

Slide 27 text

● Testabilité ● Documentation Testabilité et documentation IaC - WeSpeakCloud Les parents pauvres

Slide 28

Slide 28 text

Un modèle d’IaC partons d’un exemple client

Slide 29

Slide 29 text

Je veux pouvoir créer des plateformes… ● sans que ça me coûte trop cher ● que mes développeurs doivent pouvoir s’approprier la création (ie sans comprendre Terraform) ● je ne veux pas dépendre d’un outil de CD (pas encore choisi en interne) ● dans le cloud “GCP” ● des microservices (bien sûr !) Cas client IaC - WeSpeakCloud Début de la mission...

Slide 30

Slide 30 text

● FinOps ● Manifeste YAML pour la création de l’environnement ○ rester proche de l’architecture ● Limiter le nombre de script à lancer ● Utiliser les APIs du Cloud Provider au maximum Compréhension du besoin IaC - WeSpeakCloud Ce dont nous devons nous soucier

Slide 31

Slide 31 text

● Maîtrise des coûts : ○ utiliser des conteneurs en dev et des services managés ensuite ○ gestion de typologie de plateformes (dev/uat/prod) ○ faire des environnements éphémères ○ pouvoir choisir sa région ○ ne pas complexifier l’architecture FinOps IaC - WeSpeakCloud Ce dont nous devons nous soucier

Slide 32

Slide 32 text

name: dev-2 gcp-project: slavayssiere-sandbox region: europe-west1 type: dev remote-bucket: tf-slavayssiere-wescale prefix-bucket: gcp-sample-iac ips_whitelist: - ... Manifeste YAML IaC - WeSpeakCloud Rendre variabilisable l’infrastructure

Slide 33

Slide 33 text

infrastructure: version: 0.0.1 range-ip: 10.0.16.0/20 range-ip-master: 10.0.0.0/28 range-ip-pod: 10.0.32.0/20 range-ip-svc: 10.0.48.0/20 range-plateform: 10.0.0.0/16 bastion: cloudsql: gke: dependancies: namespaces: Manifeste YAML IaC - WeSpeakCloud Rendre variabilisable l’infrastructure gke: instance-type: n1-standard-1 ips_whitelist: - ... max: 30 min: 3 preemptible: true version: 1.12

Slide 34

Slide 34 text

infrastructure: version: 0.0.1 range-ip: 10.0.16.0/20 range-ip-master: 10.0.0.0/28 range-ip-pod: 10.0.32.0/20 range-ip-svc: 10.0.48.0/20 range-plateform: 10.0.0.0/16 bastion: cloudsql: gke: dependancies: namespaces: Manifeste YAML IaC - WeSpeakCloud Rendre variabilisable l’infrastructure bastion: image: debian-cloud/debian-9 instance-type: n1-standard-1 preemptible: true cloudsql: version: MYSQL_5_7 instance-type: "db-f1-micro" disk-size: 20

Slide 35

Slide 35 text

infrastructure: version: 0.0.1 range-ip: 10.0.16.0/20 range-ip-master: 10.0.0.0/28 range-ip-pod: 10.0.32.0/20 range-ip-svc: 10.0.48.0/20 range-plateform: 10.0.0.0/16 bastion: cloudsql: gke: dependancies: namespaces: Manifeste YAML IaC - WeSpeakCloud Rendre variabilisable l’infrastructure dependancies: prometheus-operator: version: 5.7.0 consul: enabled: true version: 3.6.1 ingress-controller: public-enabled: true software: traefik chart-version: 1.68.1 version: 1.7.11

Slide 36

Slide 36 text

infrastructure: version: 0.0.1 range-ip: 10.0.16.0/20 range-ip-master: 10.0.0.0/28 range-ip-pod: 10.0.32.0/20 range-ip-svc: 10.0.48.0/20 range-plateform: 10.0.0.0/16 bastion: cloudsql: gke: dependancies: namespaces: Manifeste YAML IaC - WeSpeakCloud Rendre variabilisable l’infrastructure namespaces: - name: gateways - name: webservices prometheus: name: prometheus-webservices - name: monitoring - name: ingress-controller - name: observability

Slide 37

Slide 37 text

applications: - documentation: http://swagger.io name: app_a version: 1.0.4 namespace: webservices - name: ws-deployment paths: - kubernetes/test/app-deployment.yaml - kubernetes/test/app-service.yaml namespace: webservices cloudsql: user: test-user user-secret: test-user-secret database: test Manifeste YAML IaC - WeSpeakCloud Rendre variabilisable l’infrastructure

Slide 38

Slide 38 text

Python permet de requêter: ● Lire et interpréter le YAML ● Terraform en local - via un processus ● GCP - via leurs APIs (ou via gcloud lancé en bash) ● Kubernetes - via REST ● Faire les “sanity check” Python... IaC - WeSpeakCloud et dans les ténèbres….

Slide 39

Slide 39 text

Démo… Code de l’exemple IaC - WeSpeakCloud testons ça !

Slide 40

Slide 40 text

Bonnes pratiques C’est mieux quand c’est dit...

Slide 41

Slide 41 text

Il faut donc suivre les bonnes pratiques des développeurs... ● Git Flow … ● Peer Programming ● Agilité ● Continuous Integration: ○ Test(s) ○ Lint - QA ○ Packaging ○ … ● Pas de changement directement en production ! L’Infrastructure as Code IaC - WeSpeakCloud c’est du code !

Slide 42

Slide 42 text

GitFlow IaC - WeSpeakCloud Comment ça marche ?

Slide 43

Slide 43 text

Il faut donc suivre les bonnes pratiques des ops... ● Monitoring ● Alerting ● Gestion d’incidents ● Criticité ● SRE ● ... L’Infrastructure as Code IaC - WeSpeakCloud c’est de l’infrastructure !

Slide 44

Slide 44 text

Documenter est une nécessité pour le partage de la connaissance. Notre infrastructure est du code, il faut suivre les bonnes pratiques de documentation du code. Notre infrastructure est versionnée, il faut donc versionner la documentation. La documentation de l’infrastructure est donc versionné dans notre SCM ! Documenter l’Infrastructure as Code IaC - WeSpeakCloud git et README.md

Slide 45

Slide 45 text

Conclusion IaC manifesto...

Slide 46

Slide 46 text

● Ecrire une application d’infrastructure ● Travailler comme un dev et penser comme un ops ● Concevoir l’infrastructure comme un produit évolutif ● Anticiper les changements applicatifs Titre 2 Hihlight Lorem ipsum dolor site amet Lorem ipsum dolor site amet Lorem ipsum dolor site amet Lorem ipsum dolor site amet Lorem ipsum dolor site amet Infrastructure as Code - Manifesto Présentation WeScale Bonnes Pratiques

Slide 47

Slide 47 text

Questions ?

Slide 48

Slide 48 text

● Vous pouvez retrouver tout le code de cette démonstration sur: https://github.com/WeScale/gcp-iac-sample ● La présentation est disponible sur SpeakerDeck (lien dans le github) ● La vidéo sera disponible sur notre chaîne Youtube : WescaleTV Sur Github... BigData @ GCP - WeSpeakCloud Retrouver la présentation et le code...

Slide 49

Slide 49 text

23 rue Taitbout 75009 Paris www.wescale.fr | blog.wescale.fr Aurélien Maury Directeur Technique 06 76 24 69 67 [email protected] Sébastien Lavayssière Flying Designer 06 24 99 47 48 [email protected]