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

Post on 26-Jun-2015

835 views 0 download

description

Retour d'experience du Groupe Express Roularta sur l'intégration de Puppet (mais finalement Chef) dans leur système d'information, permettant en quelques cliques et quelques minutes de mettre en place une ou plusieurs machines de développement parfaitement fonctionnelle et à jour, le tout hébergé sur le cloud Amazon.

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

et  un  peu  de  Chef  aussi...  

Forum PHP 2014

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  

¡  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

¡  «  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…  »  

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

¡  La  recette  /  demo  /  staging  

¡  La  preprod  

¡  La  prod  

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

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

 sous  MySQL    +  mongoDB      +  SQL  Server  

¡  Redis  ¡  RabbitMQ  

●  Reproduire  un  bout  :  trop  de  dépendances    

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

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

●  le  middleware  

●  les  applicatifs    

●  les  BDDs    

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

¡  Industrialisation  du  code  :  Git    

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

¡  Des  compétences  DevOps  

¡  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

●  Offres  de  service  

●  API    

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

¡  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    

¡  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    

¡  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  !  

¡  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.  

¡  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é.  

¡  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  

¡  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é.  

¡  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  

¡ Pas  de  «  ,  »  !    

(  ça  le  fait  hein  !  )  

¡  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,…    

¡  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,  …  

¡  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  

¡  Pas  de  solutions  idéales  pour  l’instant  

¡ Warmup  avec  un  disque  dur  (si,  si)  

¡  Rsync  

¡  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"  

¡  Faire  le  moins  de  choses  à  la  main  

¡  Gérer  son  parc  

¡  Ne  pas  être  devops  dépendant  

¡  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  

¡  Beaucoup  de  documentation  à  parcourir  

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

 

¡  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  !  

 

¡  Finir  à  100%  !  

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

¡  Faire  des  projections  budgétaires  

 

@sangele    

@nsilberman