More Related Content

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

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

  1. et un peu de Chef aussi... Forum PHP 2014
  2. 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
  3. ¡ 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
  4. ¡ « 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… »
  5. ¡ Les postes de dev : standalone ou avec serveur de dev ¡ La recette / demo / staging ¡ La preprod ¡ La prod
  6. L’Express en 2005: ¡ 1 application ¡ 1 base de données
  7. L’Express en 2014 : ¡ 6 applications PHP ¡ 15 bdd métiers sous MySQL + mongoDB + SQL Server ¡ Redis ¡ RabbitMQ
  8. ● Reproduire un bout : trop de dépendances ● Le faire à la main : long et toujours quelque chose qui manque
  9. ● Espérer que ça marche en prod...
  10. ● le middleware ● les applicatifs ● les BDDs ● les fichiers (images, pdfs,...)
  11. ¡ Industrialisation du code : Git ¡ Expérience du déploiement continu (Capistrano) ¡ Des compétences DevOps
  12. ¡ 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
  13. ● Offres de service ● API ● Instances proposées ● … et envie de s’amuser !
  14. ¡ Démarrer une instance EC2 chez Amazon est très facile, on choisi les caractéristiques de la machine et c'est parti ¡ Démarrer une stack complète est également assez simple avec CloudFormation ¡ On peux par exemple demander via l'API d'Amazon: § Créer un serveur MySQL Master/Slave § Démarrer une instance EC2 et lui communique le EndPoint MySQL afin qu'il configure ses applications en fonction
  15. ¡ 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
  16. ¡ 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 !
  17. ¡ 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.
  18. ¡ 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é.
  19. ¡ 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
  20. ¡ 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é.
  21. ¡ 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
  22. ¡ Pas de « , » ! ( ça le fait hein ! )
  23. ¡ 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,…
  24. ¡ 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, …
  25. ¡ 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
  26. ¡ Pas de solutions idéales pour l’instant ¡ Warmup avec un disque dur (si, si) ¡ Rsync
  27. ¡ 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"
  28. ¡ Faire le moins de choses à la main ¡ Gérer son parc ¡ Ne pas être devops dépendant
  29. ¡ 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
  30. ¡ Beaucoup de documentation à parcourir ¡ Nécessaire de savoir précisément ce que l'on souhaite faire pour ne pas prendre une mauvaise direction
  31. ¡ 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 !
  32. ¡ Finir à 100% ! ¡ Gérer le fichier de config pour les développeurs ¡ Faire des projections budgétaires
  33. @sangele @nsilberman