Présentation effectuée au Meetup 24 Programmez (5 Avril 2022) par Christophe Villeneuve sur "Infrastructure as code Drupal".
Cette présentation aborde les rappels de l'IaC (infrastructure as code), comment l'utilisé avec le CMS Drupal et déployé automatiquement le contenu et les évolutions dans l'IaC.
5. @hellosct1 – Programmez #24 -
IaC : Qu’est ce ? (1/2)
●
IaC = Infrastructure as code (IaC)
– Infrastructure programmable (en FR)
●
Ensemble de mécanismes permettant de gérer
– Par des fichiers descripteurs
– Des scripts (code informatique)
– Une infrastructure (informatique) virtuelle
●
S'inscrit dans la mouvance plus générale du DevOps
– Objectif d'unifier
le développement logiciel et l'administration système
6. @hellosct1 – Programmez #24 -
IaC : Qu’est ce ? (2/2)
●
Constitue une réponse aux besoins des entreprises
– En termes de mise à l'échelle des applications axée
●
Automatisation et simplification
de l'infrastructure de projets informatiques
●
Permettre au(x) développeur(s)
– de gérer l'infrastructure avec du code
– souvent avec des fichiers de configurations ou de scripts
7. @hellosct1 – Programmez #24 -
Couche basse
●
Couche basse du système d'information
– comme le serveur, le réseau ou le stockage
●
d'écrire avec du code la configuration voulu avec du code
●
Les outils IaC vont automatisés
– provisionning
– configuration
– deploiement
9. @hellosct1 – Programmez #24 -
Outils ?
●
Instancé 1 ou plusieurs VM
●
Les configurer
●
Installer
– une Base de données
– un serveur web
– un serveur d'application
●
Les isolés au niveau réseau
●
Réaliser des comptes administrateurs, utilisateurs, de services
●
Mettre en place un load balancer pour la répartition de charge
●
Pousser des certificats...
11. @hellosct1 – Programmez #24 -
Mais… Pour faire simple
●
Déployer et détruire
– à la volé les ressources dans le cloud
●
Redéployer
– cette même infrastructure suivant le besoin
●
Fournir
– des environnements stables à grandes échelles
●
Gagner
– en disponibilité et flexibilité
12. @hellosct1 – Programmez #24 -
Plusieurs types d’IaC
●
Impératif
– Ressources (instances, réseaux, etc.) sont déclarées
●
par une liste formelles d'instructions,
●
suivies dans un ordre précis,
●
pour obtenir le résultat attendu.
●
Fonctionnel
– Ressources sont déclarées de manière
●
que la configuration finale de celles-ci soit celles attendues.
●
L'ordre en lui-même n'a pas d'importance majeure.
●
Basé sur l'environnement
– Ressources sont déclarées de manière que
●
leur configuration finale et leur état
– soit en cohérence avec le reste de l'environnement qui l'entoure.
●
Il s'agit de la version la plus élaborée et celle vers laquelle
13. @hellosct1 – Programmez #24 -
En résumé
●
Infrastructure as code :
– Définissez toute votre infrastructure dans des fichiers,
jusqu'au niveau de l'interface réseau.
– Déploiement continu
●
Faire des déploiements de production une corvée.
Petits, fréquents, automatiques.
15. @hellosct1 – Programmez #24 -
Drupal : Qu’est ce...
●
CMS/F Content Management System / Framework
– Administrer vos contenus sans toucher au code
●
Open Source
– Gratuit, +30000 développeurs, +25000 modules, millions de pages de documentation
●
Flexible et modulaire
– Utilisation des modules de contribution et développement à façon
●
Moderne
– multilingue, responsive, RGAA, rapide, webservice, headless, caches
●
Performant
– Coeur léger, robuste, permet des développements poussés sans l’effet usine à gaz
– Cache natif pouvant être couplé à des solutions externes, Varnish, APC, Memcached,
MongoDB
●
Abstraction
– Approche entités plutôt que pages (types de contenu, taxonomie)
●
API
22. @hellosct1 – Programmez #24 -
Automatiser les tâches Drupal
●
Automatiser toutes ces tâches
– Flux de travail du déploiement de Drupal
– Appliquer les techniques de codage éprouvées à la façon dont
vous configurez et organisez votre infrastructure ?
●
Maintenant, pensez à la commodité de disposer d'un outil
qui transformerait les API en fichiers de configuration
déclaratifs que votre équipe pourrait facilement utiliser :
– Partager
– Modifier
– Version
– Revoir
23. @hellosct1 – Programmez #24 -
Automatiser les tâches dans votre flux de travail
●
Contraintes :
– "jongler" avec plusieurs environnements
– Synchroniser les changements de code ou de configuration
●
Obligations
– Appliquer une modification spécifique sur l'environnement
de développement
– l'exporter vers un fichier à stocker dans le contrôle de version
– Valider les changements de code/configuration dans le
contrôle de version
– Synchroniser ce fichier avec le serveur live
24. @hellosct1 – Programmez #24 -
Implémentation de l'IaC dans Drupal
●
Automatiser votre processus de déploiement
- Comment tiré parti de
l'infrastructure as code
- pour automatiser mon flux de
déploiement Drupal ?
25. @hellosct1 – Programmez #24 -
Déploiement (playbooks ansible)
●
Les étapes :
– Mise à jour de la base de données à l'aide de Drush
– Mise en place du système.
●
La liste des tâches de "mise en place" comprendrait :
●
la création d'un répertoire pour la persistance des fichiers de la base de
données
– pour stocker les sauvegardes des fichiers
– pour le stockage des sauvegardes de la base de données
●
Alors que (certaines) des tâches axées sur la mise en place et le déploiement
seraient les suivantes :
– cloner le code correct
– importation de la configuration à partir de fichiers
– vider le cache
– création du fichier .env
28. @hellosct1 – Programmez #24 -
En résumé
●
Automatisation consiste à documenter et à disposer d'un script pour chaque
étape
1 - La configuration du système, comme la création de répertoires de
sauvegarde de la base de données.
2 - Exécuter les mises à jour de la base de données via Drush
●
Il est important de sécuriser vos serveurs avant le déploiement de
l'application.
●
Ansible aide à stocker les informations sensibles de manière chiffrée,
– Les identifiants à la base de données
– la paire de clés SSH
– Informations d'identification de l'utilisateur du serveur.
●
Cette configuration vous permet de construire facilement
– des répliques de production ou un environnement de non-production.
36. @hellosct1 – Programmez #24 -
Utilisations (1/4)
●
default-content-deploy:export (dcde)
– Exporte une seule entité ou un groupe d'entités
●
default-content-deploy:export-with-references (dcder)
– Exporte une seule entité avec des références
●
default-content-deploy:export-site (dcdes)
– Exporte le contenu d'un site entier
37. @hellosct1 – Programmez #24 -
Utilisations (2/4)
●
default-content-deploy:export-aliases (dcdea)
– Exporte les alias d'url du site
●
default-content-deploy:import (dcdi)
– Importe tout le contenu défini dans un répertoire de contenu
●
default-content-deploy:import-aliases (dcdia)
– Importe les alias d'url de site
38. @hellosct1 – Programmez #24 -
Utilisations (3/4)
●
default-content-deploy:uuid-info (dcd-uuid-info)
– Obtenir le site système actuel, les UUIDs des administrateurs
et des anonymes, le nom de l'administrateur
●
default-content-deploy:entity-list (dcd-entity-list)
– Liste les types d'entités de contenu actuels
●
default-content-deploy:import (dcdi)
– Importe tout le contenu défini dans un répertoire de contenu
39. @hellosct1 – Programmez #24 -
Utilisations (4/4)
●
default-content-deploy:import-aliases (dcdia)
– Importe les alias d'url de site
●
default-content-deploy:uuid-info (dcd-uuid-info)
– Obtenir le site système actuel, les UUIDs des administrateurs
et des anonymes, le nom de l'administrateur
●
default-content-deploy:entity-list (dcd-entity-list)
– Liste les types d'entités de contenu actuels
40. @hellosct1 – Programmez #24 -
Importation
●
L'entité importée est déterminée par son UUID
– Nouvelle ou mise à jour
●
L'ID d'une entité n'est pas conservé
– Changement ID pour éviter les conflits.
●
Les références par l'ID de l'entité seront corrigées
pendant l'importation sur la base des UUID.
●
L'entité existante n'est mise à jour
que si l'entité importée est plus récente.
●
L'entité importée dont l'heure est identique ou antérieure
à celle de l'entité existante actuelle est ignorée.
Ce comportement peut être modifié par le paramètre --force-update
41. @hellosct1 – Programmez #24 -
Exemples
●
drush dcde node
– Export all nodes.
●
drush dcde node --folder='../content'
– Export all nodes from the specified folder.
●
drush dcde node --bundle=page
– Export all nodes with bundle (content type) page.
●
drush dcde node --bundle=page,article --entity_id=2,3,4
– Export all nodes with bundle page or article plus nodes with entity id 2, 3 and 4.
●
drush dcde node --bundle=page,article --skip_entities=5,7
– Export all nodes with bundle page or article
and skip nodes with entity id 5 and 7
●
drush dcde node –skip_entities=5,7
– Export all nodes and skip nodes with entity id 5 and 7