Codons notre Infrastructure
Qui suis-je
● Oswald De Riemaecker

● CEO / Co-Founder de Continuous S.A.
o Agile Delivery
o Editeur PaaS continuousphp

● Agiliste, Architecte Cloud
Culture Agile
● Amélioration au niveau de l’équipe de développement
o Meilleure collaboration
o Amélioration continue
o Toutes les compétences/Pas de silos
o Framework de tests et intégration continue

● Amélioration au niveau gestion de produit Agile
o Développement itératifs
o Découpage en fonctionnalités
o Maximisation de la valeur
o MVP/Lean Startup
Culture DevOps
● Agilité + Opération

● 3 piliers principaux:
o Infrastructure as Code (IaC)
o Livraisons/Déploiement Continue
o Culture de la coopération
Infrastructure as Code
● Coder les ressources des machines de l'infrastructure

● Coder et versioner l’infrastructure

● Tester les ressources et l’infrastructure

● Reconstruire les machines et l’infrastructure à la demande
Organisation
Mon Infrastructure Votre Infrastructure Leur Infrastructure
Locale
Environnements
Development Testing Staging Production
Roles
Load Balancer
Serveurs Application
Serveurs Indexes
Serveurs de base de données
Ressources
● Une ressource représente une partie du système et sa configuration

Apache MySql Solr
Complexité
● Maintenir une infrastructure est complexe
● Elle vit et évolue

o Ajouts de ressources
o Mise à jour ressources
o Patches de Sécurité
o Changer/Mise à jour d’OS
o ...
Outils
● Répondre à cette problématique
Chef
● Chef est un outil open-source
● Gestion l’automatisation de systèmes et d’infrastructure.
● Chef est basé sur Ruby
Chef
● Les nodes représentes les serveurs dans votre infrastructure

● Les nodes peuvent être:
o serveurs physique
o serveurs virtuel
o instances dans le cloud

● Chaque nodes appartient à:
o une organisation
o un environnement
o a un ou plusieurs rôles
Node
NodeNodeNode
Node Node
Chef Client / Serveur
Node
NodeNodeNode
Node Node
Chef
Serveur
chef-client
Ressources
Cookbooks Chef
● Les cookbooks contiennent les artefacts de nos ressources
Recipes
Templates
Files
Attributs Etats des ressources
Cookbooks Chef
● Les cookbooks contiennent les artefacts de nos ressources
Recipes
Templates
Files
Attributs Etats des ressources
Installation/configuration des ressources
Cookbooks Chef
● Les cookbooks contiennent les artefacts de nos ressources
Recipes
Templates
Files
Attributs Etats des ressources
Installation/configuration des ressources
Templates de configuration
Cookbooks Chef
● Les cookbooks contiennent les artefacts de nos ressources
Recipes
Templates
Files
Attributs Etats des ressources
Installation/configuration des ressources
Templates de configuration
Fichiers de configuration/script
L’approvisionnement
(provisioning)
Approvisionnement de Role


Node
Role: Base de
données
Chef
Serveur
Hey, je suis du rôle “Base de données”
et mon environnement “Development”
Chef clientRecipes
Templates
Attributs
Files
Cookbook Recipes
Templates
Attributs
Files
Cookbook
Exemple d’infrastructure
● Serveur Web - Apache 2.4/PHP-5.5
● Serveur de base de donnée - MySql
● Serveur d’index - Solr Web
Serveur
Solr
mysql
La communauté Chef
Analyse du Cookbook Apache
● Support plusieurs plates-formes
● Support version d’apache
● Attributs:
o dir, docroot_dir
o log_dir, error_log, access_log
o default_modules
o version
o ...
Support et dépendances Cookbook
Recipes
Templates
Attributs
Files
Metadata
Dépendance(s)
Les attributs
Recipes
Templates
Attributs
Files
Metadata
Les recettes
Recipes
Templates
Attributs
Files
Metadata
cd recipes
ls -l
default.rb
iptables.rb
logrotate.rb
mpm_prefork.rb
mpm_worker.rb
mod_php5.rb
mod_*.rb
Les templates
Recipes
Templates
Attributs
Files
Metadata
Les fichiers
Recipes
Templates
Attributs
Files
Metadata
cd files/default/
ls -l
apache2_module_conf_generate.pl
Codons nos cookbooks
Rôle: Serveur Web / Env: Production
Apache / php-5.5
Recipes
Templates
Attributs
Files
Metadata
Apache2
Recipes
Templates
Attributs
Files
Metadata
iptables
Recipes
Templates
Attributs
Files
Metadata
logrotate
PRODUCTION: Attributs de remplacement
Node Rôle: WebServer
R
O
L
E
Chef Développement Kit
● Installation de chef-dk

o Berkself
o Knife
o ChefSpec
o Test-Kitchen
o Serverspec
o Foodcritic
● knife cookbook create mon_org-webserver
Création de notre cookbook webserver
Ajout des dépendances
Dépendance(s)
● berks init
Initialisation avec Berkshelf
● berks install
Téléchargement des dépendances
● vi attributes/defaults.rb
Les attributs
Les recettes
Testons notre cookbook
● kitchen list
Testons notre cookbook
● kitchen verify default-ubuntu-1404
● knife cookbook upload mon_org-webserver
Versioner et uploader nos cookbook
Répétons l’exercice pour les roles base
de donnée et d’indexes
Approvisionnement de notre Sandbox
Development
Rôle: Sandbox / Environnement: Dev
mon_org-webserver
mon_org-index
mon_org-database
Composer NodeJs
Recipes
Templates
Attributs
Files
Metadata
Recipes
Templates
Attributs
Files
Metadata
Recipes
Templates
Attributs
Files
Metadata
Recipes
Templates
Attributs
Files
Metadata
Recipes
Templates
Attributs
Files
Metadata
mon_org-webserver mon_org-Index mon_org-database composer nodejs
DEVELOPPMENT: Attributs de remplacement
Node Rôle: Sandbox
R
O
L
E
Création de notre cookbook
● knife cookbook create mon_org-sanbox
Ajout des dépendances
Dépendances
Téléchargement des dépendances
Les recettes
● vi recipes/default.rb
● vi attributes/default.rb
Les attributs
Attributs
Testons notre cookbook
● Cookbooks par rôle de l’infrastructure
● Cookbook spécifique à l’environment de développement
o utilise les cookbooks des rôles de l’infrastructure

● Reproduction fiable de l’approvisionnement des rôles de l’infrastructure:

o Codé
o Versionné
o Testé
o Déployé
Approvisionnement Résumé
Créons nos environnements
Locale
Créons notre environnement de development
Development
Vagrant
● Créer et configurer des environnements de développement

● Providers (Drivers)
o Virtualbox/VMWare
o Docker
o Instance EC2

● Approvisionnement avec:
o Chef Client/Solo
o Docker
o Puppet Agent
o …
Vagrantfile
Vagrant up
Infrastructure Immuable
Infrastructure Immuable
● Avantages:
o Economie du temps perdu lors de l’approvisionnement
o Plus de maintenance de serveurs => Remplacement
o Image machine statique pré-construites et testées
o Retour aisé à une version précédente
V1
V2
V3
Data
Packer
● Packer

o Builders (Amazon AMI, Microsoft Azure, DigitalOcean, Docker,
Google Compute Engine, …)
o Provisioners (Shell script, Chef client, Ansible, Puppet, Salt, …)
o Post-processor (Docker-push, Vagrant, Atlas, …)
Packer Config
Builders
Packer Config
Provisioners
● packer build packer.json
Créons nos image
Créons nos image
Répétons l’exercice pour le rôle index
Créons notre environnement de Production/Staging
AWS CloudFormation
● Manière simple de créer et gérer un regroupement de ressources AWS

● CloudFormation s’occupe des dépendances

● Une fois les ressources déployées, vous pouvez les modifier et les mettre à jour de
manière prévisible et contrôlée

● AWS CloudFormation prend en charge les ressources suivants :

o Auto Scaling/Elastic Load Balancing
o VPC
o EC2
o RDS
o IAM
o …
VPC
Subnet Privé
Subnet Public
JSON
Autoscale
Web Web Web
Autoscale
Index Index Index
Structure d’un CF
Structure d’un CF
Structure d’un CF
Structure d’un CF
Structure d’un CF
Structure d’un CF
Créons notre pile web serveur
Créons notre pile web serveur
Créons notre pile web serveur
Créons notre pile web serveur
● Approvisionnement de nos machines
● Infrastructure Immuable
o Images statiques
● Utilisation Images dans Cloud Formation AWS

● Paramètre d’environnement Cloud Formation

● Nous pouvons maintenant utiliser nos artefacts pour construire nos
différents environments
Infrastructure Résumé
Orchestration de l’infrastructure
Testing
Development
Vagrant
Feature branch
develop branch
revision branch
Staging
Production
CI/CD
prepare test package
prepare test package
prepare test package
Questions ?
Thank you
oswald_odr
oswald@continuousphp.com

Codons notre infrastructure