Slide 1

Slide 1 text

LA MISE EN PRODUCTION EST UN LIEU OÙ LA CHANCE N’A PAS SA PLACE !

Slide 2

Slide 2 text

INFRASTRUCTURE AS CODE ARNAUD LEMAIRE | @LILOBASE

Slide 3

Slide 3 text

• Avoir son infrastructure dans un état connu et documenté • Bénéficier d’une procédure de configuration indépotente & répétable

Slide 4

Slide 4 text

MAIS AVANT, PARLONS DU COTÉ APPLICATIF… THE TWELVE FACTOR APP

Slide 5

Slide 5 text

INTRODUCTION PRINCIPES • Créé par Adam Wiggins (Heroku) • Limite grandement l’adhérence de l’application à son infrastructure • Permet d’automatiser le déploiement de l’application • Simplifie le déploiement continu

Slide 6

Slide 6 text

SÉPARER APPLICATION ET PERSISTENCE PRINCIPES • L’application doit être en share-nothing et stateless • Données • Bases de Données (utilisez des migrations) • Fichiers persistant (les caches ne comptent pas) • Logs

Slide 7

Slide 7 text

UNE INJECTION DE DÉPENDANCE AU NIVEAU APPLICATIF PRINCIPES • Injecter les dépendances logicielles (package) • Injecter les dépendances aux backing services (datastores, serveur mail, queue, …) • Configuration

Slide 8

Slide 8 text

OBJECTIF PRINCIPES • Une code base, plusieurs déploiements • Séparer ce qui est constant entre les installations de ce qui est spécifique • Les déploiement pouvant être fait sur des environnements ou clients différents

Slide 9

Slide 9 text

SÉPARER APPLICATION ET PERSISTENCE MISE EN OEUVRE • Placer l’application et ses « backing services » sur des serveurs différents • Placer les fichiers devant être persistés dans un espace partagé (NAS, Bucket, …) • Envoyer les logs sur la sortie standard

Slide 10

Slide 10 text

UNE INJECTION DE DÉPENDANCE AU NIVEAU APPLICATIF MISE EN OEUVRE • Décrire et installer les dépendances à l’aide d’un outil dédié (composer, npm, bundler, gradle, …) • Injecter la configuration de l’application via des variables d’environnements • Injecter les accès aux datastores via des variables d’environnements

Slide 11

Slide 11 text

CONCLUSION • Les sauvegardes sont simplifiés : seul les datastores et les espaces de fichiers sont concernés • Le scaling horizontal devient très simple, il suffit d’injecter les bonnes variables d’environnement pour démarrer une nouvelle instance L’APPLICATION EST BIEN PLUS RÉSILIENTE

Slide 12

Slide 12 text

PARLONS MAINTENANT DE L’INFRASTRUCTURE CE POUR QUOI VOUS ÉTIEZ VENU…

Slide 13

Slide 13 text

INFRASTRUCTURE AS CODE • L’on décrit son infrastructure sous forme de « code » qui une fois exécuté permettra d’obtenir l’infrastructure en question • L’infrastructure devient prévisible et contrôlée, elle peut être testée et versionnée • L’outil qui va exécuter la description de l’infrastructure est un système de provisioning

Slide 14

Slide 14 text

A QUOI SERT UN OUTIL DE PROVISIONING • C’est de l’administration système automatisé, vous gagnez du temps sur des taches répétitives et peu intéressantes • Installe et configure automatiquement votre infrastructure • Garantie et documente l’état de l’infrastructure • Vous pouvez déployer et administrer facilement un cluster de machines

Slide 15

Slide 15 text

A QUOI NE SERT PAS UN OUTIL DE PROVISIONING • Ça n’est pas un système de déploiement / build • Ça ne remplace pas un administrateur système (docker non plus d’ailleurs…) • Ça ne gère pas les machines (physiques ou virtuelles) mais uniquement le logiciel qui va dessus • Utilisez du provisioning en association avec des outils qui gèrent déploiements et machines

Slide 16

Slide 16 text

ANSIBLE CE POUR QUOI VOUS ÉTIEZ VRAIMENT VENU…

Slide 17

Slide 17 text

TOUT COMMENCE AVEC UN INVENTAIRE • L’inventaire est un fichier au format ini qui contiens les machines qu’Ansible doit provisionner • Les machines peuvent être regroupées par groupe

Slide 18

Slide 18 text

AUXQUELS L’ON ASSOCIE DES RÔLES • Les rôles représente une configuration de provisioning, au format yaml, pour un service donné (utilisateur, db, …) • Ils sont composés de : • tasks : commandes à effectuer pour provisioner le service • handlers : pour gérer les services systèmes associés (démarrage, arrêts, …) • templates : fichier qui pourra recevoir des variables avant d’être transférés sur la machine distante

Slide 19

Slide 19 text

TASKS

Slide 20

Slide 20 text

HANDLER

Slide 21

Slide 21 text

TEMPLATES

Slide 22

Slide 22 text

CES RÔLES SONT ORCHESTRÉS AU SEIN D’UN PLAYBOOK • Le playbook décrit les rôles à exécuter pour un groupe de machine donné • En fait les rôles sont des playbook spécialisés

Slide 23

Slide 23 text

DANS LEQUEL ON INJECTE DES VARIABLES

Slide 24

Slide 24 text

RÉCAPITULONS • L’infrastructure est décrite sous forme d’un playbook qui va orchestrer des rôles en fonction de groupes décrit dans un inventaire • Les rôles sont composés de tasks, handlers et templates • L’ensemble reçoit des variables de configuration Il ne reste plus qu’à déclencher le provisioning : ANSIBLE-PLAYBOOK -I HOSTS PLAYBOOK.YML

Slide 25

Slide 25 text

MERCI ARNAUD LEMAIRE | @LILOBASE QUESTIONS ?