Migración de contenidos - Análisis y plan de migración

20/10/2020
Migración de contenidos - Análisis y plan de migración

Uno de los servicios estrella que prestamos en la Drupalera es el de migración de sitios a Drupal 8, independientemente de la tecnología origen. Es un servicio muy demandado y que requiere de mucho cuidado para implementarlo de manera eficiente.

Las principales lecciones que hemos aprendido en los últimos años las hemos recopilado en una serie de artículos que comenzamos hoy, donde mostraremos cómo migrar contenidos a Drupal 8/9.

El principal enfoque está orientado a realizar migraciones desde un drupal 7, no obstante, se mencionan otros sistemas de origen para poder llevarlas a cabo.

Los contenidos de la serie serán:

  1. Migración de contenidos - Análisis y plan de migración.
  2. Migración de contenidos - Estructura de una migración.
  3. Migración de contenidos - Cómo funciona el ETL del módulo migrate (Plugins).
  4. Migración de contenidos - Administrando migraciones (Migrate tools).

¡Comenzamos!

¿Qué es una migración en el contexto Drupal?

En versiones anteriores a Drupal 8, migrar contenido y subir de versión eran dos conceptos que venían de la mano. Para esto se utilizaba la misma base de datos y las tareas se centraban en adecuar el código (descargar el core de Drupal, módulos contribuidos, temas, etc.). Una vez que lo teníamos, actualizábamos el sistema mediante una serie de rutinas al ejecutar el update.php.

Por otro lado, cabe destacar que para estas versiones estaba disponible el módulo contribuido migrate. Con el cual se conseguía hacer el traspaso de información o contenidos desde diferentes fuentes de datos, entre ellas Drupal.

La versión 8 o posterior de drupal cambia drásticamente la filosofía de migrar desde versiones anteriores a esta. Esto se debe al cambio que trae en sí (orientado a objetos, plugins, servicios, etc). Por ello, para subir la versión es preciso realizar dos pasos fundamentales y diferenciados:

  1. Construcción del sitio (no para migraciones automáticas).
  2. Desarrollar y lanzar la migración de contenidos.

En estas, el módulo migrate viene incluido en el core de drupal y tiene la ventaja en relación a las anteriores versiones que se puede migrar configuraciones y no solo contenido.

Migraciones automáticas

Para realizar migraciones automáticas desde Drupal 6 ó 7 a versiones posteriores, existe un conjunto de módulos (Migrate, Migrate Drupal UI y Migrate Drupal). Con estos se puede configurar migraciones y lanzarlas a nivel de interfaz. Simplemente configurando la base de datos, carpeta de archivos (files) de origen y buscando la relación de módulos para la adaptación del código en destino.

Las principales limitaciones de este tipo de migraciones son las siguientes:

  • Hay módulos que no existen para las actuales versiones.
  • Tienes que trabajar con instalaciones limpias, por lo que no puedes hacer una construcción del sitio hasta haber lanzado la migración.
  • Las migraciones se lanzan sólo una vez y no se pueden realizar rollback. Si has realizado cambios después de haber lanzado la migración y detectas algo que sea incoherente, necesitando volver a lanzar la migración y perderás esos cambios.
  • No se pueden realizar migraciones incrementales.
  • Es muy difícil que cumpla con los requisitos de tu sistema de información.

Por esas limitaciones no se recomienda el uso de este tipo de migraciones. Para realizar una migración de contenido hay que desarrollarlas.

Definición de una migración

¿Qué vamos a migrar a Drupal 8 o posterior?

Lo primero que tenemos que tener en cuenta es atender a esta pregunta. Algo que nos puede ayudar a esto es tener construido el destino, o al menos saber cuál será el modelo de datos que

  • Usuarios
  • Contenido
  • Multimedia
  • Taxonomías
  • Roles
  • Bloques
  • Alias de URL
  • Configuraciones

Esta información nos ayudará a saber cómo se procesarán los datos de origen y tendremos un punto de partida para poder empezar a analizar la migración. Podremos generar relaciones de entidades de origen a destino tipo un diagrama entidad/relación.

Análisis del origen de datos

Para poder asegurar y definir el desarrollo que vamos a realizar en las migraciones, debemos de tener presentes una serie de claves que nos darán información sobre  tiempos de desarrollo y complejidad de estas:

  • Cuál es la fuente de datos (SGBD o soporte de datos) del origen del que vamos a migrar (MySQL, CSV, PostgreSQL, etc). Existen módulos contribuidos que amplían estas funcionalidades por ejemplo Migrate Source CSV.
  • Cuál es la arquitectura base (Drupal 6, Drupal 7, Wordpress, etc.). Existen módulos contribuidos que amplían el origen por ejemplo WordPress Migrate.
  • Relaciones entre entidades de datos, usuarios, tablas, tipos de contenidos, etc.
  • Ficheros, formatos, blob, binary, cdn, etc.
  • Generación de documentación sobre los contenidos y entidades de origen que van a ser migrados. A continuación un ejemplo sobre este punto:
Drupal migrations - Example of a field mapping document

Relaciones origen/destino de una migración

La relación de entidades desde un soporte de origen a un destino pueden ser diversas:

  • Relación (1, 1): Una entidad origen irá asociada a una entidad en el destino. Por ejemplo, en el caso de un tipo de contenido artículo en el origen, dará lugar a contenidos de un tipo artículo en el destino: Artículo -> Artículo
  • Relación (N, 1): N entidades en origen irán asociadas a una entidad en el destino. Por ejemplo en el caso de que en origen existiesen dos tipos de contenidos  (publicaciones y noticias) y en destino un tipo de contenido noticias que aúna estos dos: Publicaciones y Noticias -> Noticias
  • Relación (1, N): Una entidad de origen irá asociada a varias entidades en el destino. Por ejemplo, si en el origen existen noticias que tienen un campo para diferenciarlas (noticias, publicaciones, etc) y en el destino existen diferentes tipos de contenidos por cada tipo. Noticias -> Noticias, Publicaciones, etc.

Generar documentación

La generación de la documentación nos da información del mapeo de entidades, campos o datos que debemos ejecutar dentro de una migración. A continuación se muestra un excel de una migración de Drupal 7 a Drupal 8, en el cual se expone el mapa de campos de varios tipos de contenido origen a uno destino.

Drupal Migrations - Relationship and/or data map between origin and destination
Relación y/o mapa de datos entre origen y destino

La imagen anterior es un ejemplo claro de una relación N:1, por lo que en esta migración dos tipos de contenido origen (news y publications) convergen en uno solo en el destino. Mediante el campo field_type sabremos si es noticia o publicación.

Se muestran los tipos de contenido de destino a la izquierda (siempre será uno) y los tipos de contenido de origen a la derecha, que serán uno o más. El título de cada tipo de contenido nos llevará a una hoja de excel en la que tendremos más información sobre la entidad deseada. También tenemos un selector de estados (Pendiente, bloqueada y finalizada) para saber en el que se encuentra dicha migración.

Cabe mencionar que en el excel, dependiendo de la cantidad de personas que se encuentren en el equipo de migración, se pueden añadir campos para sus asignaciones y así realizar un trabajo colaborativo sobre este. Al igual, puede ampliarse para añadir cualquier otra información relevante acerca de la migración.

Conclusiones

Concluimos con que lo más importante de este post atiende a lo siguiente:

  1. Definir qué vamos a migrar a Drupal
  2. Analizar el origen de los datos
  3. Definir el destino para empezar a intuir y entender cómo se procesarán los datos
  4. Especificar las relaciones entre las dos migraciones y sus tipos
  5. Generar documentación para tenerlo todo preparado

En el siguiente post veremos como será la estructura de una migración para poder empezar a mover datos.