Lors de la refonte d’un site web, on est confronté à la problématique de migration des données.
On peut la voir avec 2 prismes / visions :
Le mode copier coller 🙂
Pas d’import des données, car il y a une refonte de l’ergonomie, de l’arborescence ou tout simplement, il est préférable de faire le championnat du monde des copier / coller plutôt que de faire un import important des données qu’on va devoir vérifier, réorganiser etc..
C’est juste une question d’effort humain vs une automatisation.
Exemple : Si en 2 jours de copier // coller j’arrive à restructurer mon contenu, c’est bien plus bankable que de demander à l’équipe technique de faire une moulinette (3 jours de dev), puis de vérifier (1 jour de recette)
La moulinette d’import
Ça va consister à réimporter les données historiques ou nouvelles dans des entités du site internet ou de l’application. C’est le sujet que nous allons aborder, avec une vision sur Drupal 9 API.
La aussi c’est une question d’effort et de possibilité humaine. Dans notre cas, nous avions plus de 30 000 fiches / données à transférer, ce qui n’est juste pas possible et qui nécessite une automatisation.
Migrer les données de son ancien site internet
La migration des données est un besoin souvent rencontré dans le développement de sites web. Que ce soit pour une migration de version majeure ou bien d’un changement de technologie, elle paraît indispensable si le client souhaite pérenniser ses données dans le temps.
Les besoins peuvent être divers et variés car on peut migrer des données sur Drupal à partir :
- d’une version Drupal antérieure
- d’un fichier CSV, JSON, XML ou autre format
- d’un autre CMS
- d’une base de données
- d’un service web ou d’une url.
Dans ce cas, Drupal définit un mécanisme et des outils permettant de mener à bien ce genre de demande. Nous allons voir cela de plus près.
Comment fonctionne la migration des données avec Drupal ?
Voilà un petit schéma qui illustre la migration de données :
On y distingue 2 opérations importantes :
- import : importe les données depuis la source (JSON, XML, CSV, Base de données, API ou autres) vers une base de données Drupal sous forme d’entités (Node, paragraph, taxonomie, fichiers, autres entités Drupal, etc…)
- rollback : Annule l’import des données. Retire tout ce qui a été importé en base.
L’opération d’import est définie par un ou plusieurs fichiers qui définissent le déroulement de la migration. Ces schémas peuvent être écrits en PHP mais sont généralement matérialisés par des fichiers YML, en voici un exemple :
Les zones encadrées sont des rouages essentiels à la migration de données. Ils permettent de définir (source), de traiter (process) et de convertir (destination) la donnée via une table de correspondance (id_map)
Explications de ces différents types de plugin :
- id_map : Définit une table de correspondance entre la donnée importé (row) et sa destination (entité drupal).
- source : Permet de définir la source de données qui sera traitée lors de la migration. Cela peut être un fichier CSV, JSON, XML, YML et même une base de données. On peut définir ses propres plugins (comme par exemple un parser HTML).
- destination : Il s’agit de l’entité Drupal de destination qui va porter la donnée importée. Exemple : on importe une ligne de CSV contenant un titre, une image et un texte. La destination sera une entité Drupal noeud de type “Page” qui a un champ titre, image et texte riche.
- process : Ensemble de traitements sur la donnée en cours d’importation. Cela permet de transformer tout ou une partie afin de la faire correspondre à l’entité de destination. Par exemple, transformer une date dans un autre format.
Le fichier de migration peut contenir :
- un id (obligatoire) permettant d’identifier la migration
- un label (obligatoire)
- un ou plusieurs tags (optionnel) pour les regrouper par catégories
- des dépendances (conseillé) pour ordonner l’exécution de migrations liées
En base de données, pour chaque migration définie on aura la génération de deux tables :
- migration_map_<id_migration> : Une table faisant la correspondance entre l’identifiant source de la donnée et son identifiant destination de l’entité générée côté Drupal.
- migration_message_<id_migration> : Permet d’enregistrer d’éventuels messages d’erreur ou d’omission d’import d’une ou plusieurs données.
Les outils pour la migration de données fournis par Drupal
- migrate (core / obligatoire) => module de base pour la migration de données.
- migrate_tools (contrib / fortement conseillé) => Fournit l’ensemble des commandes drush nécessaires pour les opérations de migration (import, rollback, reset, status…).
- migrate_plus (contrib / fortement conseillé) => Contient un ensemble de plugins pour la source, la destination et le process. Introduit la notion de “data parser” permettant un pré-traitement des données à importer. Exemple : Décoder un fichier JSON. Module indispensable si l’on souhaite migrer des fichiers XML/SOAP, JSON et même des données au travers d’une URL.
- migrate_source_csv (contrib / en fonction du besoin) => Permet de migrer des fichiers CSV
- migrate_source_html (contrib / en fonction du besoin) => Permet de migrer des sources HTML.
Pour conclure sur la migration de données de votre site internet
La migration de données peut paraître complexe, néanmoins au fur et à mesure de l’évolution des versions de Drupal, celle-ci s’est simplifiée et densifiée au travers de son mécanisme mais aussi des modules proposés.
Pour les moins techniques, il peut y avoir des alternatives tel que le module feeds qui offre une interface utilisateur pour implémenter des migrations sans avoir à coder.
Le choix dépendra de la complexité de la demande.
Avant de vous lancer, faites clairement le point sur les données à migrer et le pourquoi. Ceci vous évitera d’investir du temps pour rien.
Si vous avez besoin d’un audit ou d’un avis pour votre préparation de migration des données, vous pouvez nous contacter.
Ceci aussi bien sur des projets open source WordPress, Drupal ou des développements 100% sur mesure avec Symfony.
Source :