Download - Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

Transcript
Page 1: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

et  un  peu  de  Chef  aussi...  

Forum PHP 2014

Page 2: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

SÉBASTIEN  ANGÈLE                    DIRECTEUR  ADJOINT  DES  NOUVEAUX  MÉDIAS  -­‐  GROUPE  EXPRESS  ROULARTA  

     

NICOLAS  SILBERMAN                    CONSULTANT  EN  ARCHITECTURE  IT    -­‐  VANILLE  CARAMEL  ENSEIGNANT    -­‐  ESSEC  BUSINESS  SCHOOL  ANCIEN  PRÉSIDENT  DE  L’AFUP  

Page 3: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

¡  Groupe  historique  de  presse  L’Express,  L’Expansion,  L’Entreprise,  Mieux  Vivre  Votre  Argent,  L’Express  Styles,  Côté  Sud,  Côté  Ouest,  Zeste,  Point  de  Vue,  Studio  Ciné  Live,  Lire,  Classica,  A  nous  Paris,  L’Etudiant…    

¡  Sur  le  web  :    

7 millions de VU/mois TOP 5 des sites d’actu

1 million de VU/mois Leader de la déco

Page 4: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)
Page 5: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

¡  «  Non,  chez  moi,  ça  marche…  »  

¡  «  C’est  normal,  je  ne  t’ai  pas  tout  installé,  ne  regarde  pas  cette  partie  du  site...  »  

¡  «  Ah  bon,  tu  voulais  tester  ça  aussi  ?  »  

¡  “T’inquiète  pas,  ça  marchera  en  prod…  »  

Page 6: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

¡  Les  postes  de  dev  :  standalone  ou  avec  serveur  de  dev  

¡  La  recette  /  demo  /  staging  

¡  La  preprod  

¡  La  prod  

Page 7: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)
Page 8: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

L’Express  en  2005:    ¡  1  application  ¡  1  base  de  données  

Page 9: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

L’Express  en  2014  :    ¡  6  applications  PHP  ¡  15  bdd  métiers  

 sous  MySQL    +  mongoDB      +  SQL  Server  

¡  Redis  ¡  RabbitMQ  

Page 10: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)
Page 11: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

●  Reproduire  un  bout  :  trop  de  dépendances    

●  Le  faire  à  la  main  :  long  et  toujours  quelque  chose  qui  manque  

Page 12: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

●  Espérer  que  ça  marche  en  prod...  

Page 13: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

●  le  middleware  

●  les  applicatifs    

●  les  BDDs    

●  les  fichiers  (images,  pdfs,...)  

Page 14: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

¡  Industrialisation  du  code  :  Git    

¡  Expérience  du  déploiement  continu  (Capistrano)  

¡  Des  compétences  DevOps  

Page 15: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

¡  C’est  un  mouvement  

¡  Réduire  les  frictions  entre  §  Les  devs  §  Les  ops  (aka  admin  sys  ou  barbus)  

¡  Pour  une  belle  phrase  commune  :  «  travailler  ensemble  pour  produire  de  la  valeur  pour  l'entreprise  »  

sources wikipedia

Page 16: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

●  Offres  de  service  

●  API    

●  Instances  proposées    ●  …    et  envie  de  s’amuser  !  

Page 17: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)
Page 18: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

¡  Démarrer  une  instance  EC2  chez  Amazon  est  très  facile,  on  choisit  les  caractéristiques  de  la  machine  et  c'est  parti    

¡  Démarrer  une  stack  complète  est  également  assez  simple  avec  CloudFormation    

¡  On  peut  par  exemple  demander  via  l'API  d'Amazon:  §  Créer  un  serveur  MySQL  Master/Slave  §  Démarrer  une  instance  EC2  et  lui  communiquer  le  EndPoint  MySQL  afin  qu'il  configure  ses  applications  en  fonction    

Page 19: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

¡  Facile  de  se  noyer  et  de  se  perdre  dans  les  offres  :  §  Se  faire  accompagner  par  quelqu’un  qui  connait  pour  gagner  du  temps  

¡  Si  aucune  expérience  dans  le  Cloud,  attention  à  la  maîtrise  du  budget  §  Poser  des  alertes  sur  des  seuils  budgétaires  

 ¡  Gouvernance  des  machines  et  optimisation  des  ressources  

§  Optimiser  au  plus  près  :  une  machine  qui  ne  fait  rien  n’a  aucune  raison  d’  être  allumée    

Page 20: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

¡  Logiciel  qui  permet  de  gérer  les  déploiements  système  et  applicatif  

¡  Historiquement  :  scripts  Bash  et  Cfengine  

¡  Deux  candidats  open  source  :    §  Puppet  (Ruby)  §  Chef  (Erlang)  

¡  Et  Ansible  ?  On  ne  connaissait  pas  !  

Page 21: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)
Page 22: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

¡  Précédentes  expériences  sur  des  stacks  plus  petites  dans  l’équipe  

¡  Expérience  significative  de  Nicolas  Silberman  chez  Mediapart  sur  les  problématiques  d'environnement  de  développement  

¡  Volonté  de  rapidement  démarrer  sur  le  projet.  

Page 23: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

¡  Pour  démarrer  :  utiliser  Foreman  directement  

¡  Attention  :  configuration  de  type  hiera  (fichiers  YAML  fournissant  des  variables)  non  compatible  avec  Foreman:  lourd  travail  d'adaptation  pour  repasser  en  Foreman.    

¡  Recettes  de  la  communauté  sont  utilisés  par  un  grand  nombre  et  quand  elles  sont  maintenues,  elles  sont  d'excellente  qualité.  

Page 24: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

¡  Complexité  avec  l'arbre  de  dépendances.    

¡  Il  n'est  pas  rare  de  se  poser  la  question:    cette  action  doit-­‐elle  être  réalisée  avant  celle  la  ?    

¡  Exemple  de  Dépendance:    §  install_apache  §  créer  un  Vhost  §  restart_apache  

Page 25: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

¡  Puppet  compile  l'ensemble  des  recettes,  réalise  un  arbre  de  dépendances  et  joue  les  modifications  à  faire  sur  le  système  dans  l'ordre  des  dépendances  qu'il  a  déterminé    

¡  Quand  on  atteint  la  vingtaine  (ou  même  cinquantaine)  de  niveau  de  dépendances,  trouver  d'où  est  le  problème  devient  compliqué.  

Page 26: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)
Page 27: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)
Page 28: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)
Page 29: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

¡  Tutoriaux  de  la  communauté  et  la  documentation  fournie  par  AWS  faisait  uniquement  mention  de  Chef  (même  si  la  doc  Puppet  arrive  doucement  sur  AWS)    

¡  Choix  de  Chef  par  notre  hébergeur  pour  la  prod    

¡  Recettes  plus  simples  à  écrire  

Page 30: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

¡ Pas  de  «  ,  »  !    

(  ça  le  fait  hein  !  )  

Page 31: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

¡  Au  début  :  images  de  Base  (AMI)  des  distributions  linux    

¡ Maintenant  :  Packer.io  pour  construire  des  images  avec  :  §  Nginx  compilé  (gestion  des  SSI)  §  Autres  briques    :  MySQL,  Redis,  MemCache,  RabbitMQ,  Apache,  Php,…    

Page 32: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)
Page 33: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)
Page 34: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

¡  Un  tableau  de  variable  pour  :  §  Créer  les  Vhost  Nginx  §  Cloner  le  projet,  exécuter  un  composer  install  §  Cloner  un  sous  repository  dans  un  sous-­‐dossier  §  Remplacer  des  fichiers  au  sein  du  dépot  (fichiers  de  configuration)  

§  Créer  des  règles  spécifiques  dans  Varnish  §  Lancer  des  commandes  de  warmup,  de  générations  de  cache,  …  

Page 35: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)
Page 36: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)
Page 37: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)
Page 38: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

¡  A  remonter  de  la  prod  tous  les  jours  :  §  10  bases  de  donnée  MySQL  §  5  Bases  MongoDB  §  1  Dump  Redis  §  1  base  SQL  Serveur    

¡  30h  pour  tout  remonter  §  Arbitrer  la  fraîcheur  des  données  §  Optimiser  les  bases  de  données  

Page 39: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

¡  Pas  de  solutions  idéales  pour  l’instant  

¡ Warmup  avec  un  disque  dur  (si,  si)  

¡  Rsync  

Page 40: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

¡  Permet  de  faire  des  tests  unitaires  et  fonctionnel  sur  les  recettes  

¡  Compatible  avec  beaucoup  de  provisionner  (Puppet,  Chef),  bootstrapper  (Amazon  EC2).    

¡  Concept  de  "Infrastructure  as  Code"  

Page 41: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

¡  Faire  le  moins  de  choses  à  la  main  

¡  Gérer  son  parc  

¡  Ne  pas  être  devops  dépendant  

Page 42: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)
Page 43: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)
Page 44: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

¡  Très  bonne  documentation  

¡  Disponibilité  et  temps  de  réponses  

¡  SDK  fourni  pour  PHP  :  se  base  sur  Guzzle  pour  envoyer  les  requêtes  et  clients  distincts  pour  chaque  service  (EC2Client,  CloudFormationClient,  S3Client,  etc)  

¡  Intégration  rapide  du  SDK  dans  un  projet  Symfony2  grâce  à  l'injection  de  dépendance  et  l'event  dispatcher  

Page 45: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

¡  Beaucoup  de  documentation  à  parcourir  

¡  Nécessaire  de  savoir  précisément  ce  que  l'on  souhaite  faire  pour  ne  pas  prendre  une  mauvaise  direction  

 

Page 46: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

¡  Investissement  lourd  au  début  

¡  Se  mette  en  mode  projet  avec  une  équipe  dédiée  

¡  Travailler  en  agile  et  en  lean...  

¡  …  tout  en  restant  ambitieux  !  

 

Page 47: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

¡  Finir  à  100%  !  

¡  Gérer  le  fichier  de  config  pour  les  développeurs  

¡  Faire  des  projections  budgétaires  

 

Page 48: Industrialisation des environnements de dev avec Puppet et Amazon (mais en fait avec Chef)

@sangele    

@nsilberman