Comment coder son infrastructure sur GCP et AWS ? Par Sébastien Lavayssière

78605f82de8b2ea497603533d022f1e0?s=47 WeScale
June 25, 2019

Comment coder son infrastructure sur GCP et AWS ? Par Sébastien Lavayssière

Au programme de cette nouvelle session des #WeSpeakCloud :

"Comment coder son infrastructure sur GCP et AWS ?"

L'Infrastructure as Code est maintenant au centre de tous les discours, conférences, entretiens et certaines entreprises l'utilisent au quotidien.

Mais comment faire une infrastructure "as code" ?
Quelles sont les objectifs et les bonnes pratiques ?
Les développeurs sont ils des "dev" ou des "ops" ?

Nous allons essayer de balayer l'ensemble des pratiques et des erreurs qu'on peut croiser en ce moment dans nos missions et essayer de proposer ce qu'est l'objectif de l'IaC.

Quelques pré-requis pour profiter pleinement de ce rdv :

- Bases de gitflow.
- Notion d'infrastructures cloud.

Mais les #WeSpeakCloud by WeScale késako ?
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 "et si nous parlions Cloud ?", 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

78605f82de8b2ea497603533d022f1e0?s=128

WeScale

June 25, 2019
Tweet

Transcript

  1. Comment écrire son Infrastructure as Code ?

  2. 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.
  3. • Sébastien Lavayssière Lancement IaC - WeSpeakCloud Le présentateur

  4. 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
  5. 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
  6. Erreurs à éviter ou toutes les angoisses du consultant...

  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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 !
  13. 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 !
  14. 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 ?
  15. Erreur #4 - Définition IaC - WeSpeakCloud Idempotence ? Merci

    au blog: https://learningtotest.blog
  16. 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 ?
  17. 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
  18. 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
  19. Chacune de mes plateformes est une branche Git ! Erreur

    #5 IaC - WeSpeakCloud GitOps
  20. 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
  21. La boîte à outils quelles technos j’utilise ?

  22. 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
  23. • Terraform • Cloud Formation • Deployment Manager • autres…

    (hors cloud) Création d’infrastructure IaC - WeSpeakCloud Dans le Cloud
  24. • 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)
  25. • 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
  26. 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….
  27. • Testabilité • Documentation Testabilité et documentation IaC - WeSpeakCloud

    Les parents pauvres
  28. Un modèle d’IaC partons d’un exemple client

  29. 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...
  30. • 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
  31. • 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
  32. 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
  33. 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
  34. 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
  35. 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
  36. 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
  37. 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
  38. 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….
  39. Démo… Code de l’exemple IaC - WeSpeakCloud testons ça !

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

  41. 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 !
  42. GitFlow IaC - WeSpeakCloud Comment ça marche ?

  43. 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 !
  44. 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
  45. Conclusion IaC manifesto...

  46. • 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
  47. Questions ?

  48. • 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...
  49. 23 rue Taitbout 75009 Paris www.wescale.fr | blog.wescale.fr Aurélien Maury

    Directeur Technique 06 76 24 69 67 aurelien.maury@wescale.fr Sébastien Lavayssière Flying Designer 06 24 99 47 48 sebastien.lavayssiere@wescale.fr