Migración de medias desde on-premise a SAP Commerce Cloud

Uno de los componentes más críticos al migrar SAP Commerce a SAP Commerce Cloud es trasladar los datos existentes sin problemas desde on-premise a SAP Commerce Cloud en CCv2. Este proceso implica dos tareas principales: migrar la base de datos y los archivos multimedia. Este artículo se centrará en los archivos multimedia y proporcionará una guía detallada sobre cómo migrarlos de manera eficiente a SAP Commerce Cloud.

Estrategias de almacenamiento de medias en SAP Commerce

SAP Commerce ofrece diferentes estrategias para el almacenamiento de medios. En un entorno on-premise, la estrategia predeterminada es localFileMediaStorageStrategy, implementada por de.hybris.platform.media.storage.impl.LocalFileMediaStorageStrategy. Esta estrategia almacena archivos multimedia en una carpeta local en el sistema donde se ejecuta SAP Commerce. Un directorio compartido se utiliza en un entorno agrupado, al que pueden acceder todos los nodos SAP Commerce a través de NFS (sistema de archivos de red).

Por el contrario, la estrategia recomendada para SAP Commerce Cloud es windowsAzureBlobStorageStrategy, implementada por de.hybris.platform.azure.media.storage.WindowsAzureBlobStorageStrategy de la extensión azurecloud. Esta estrategia almacena archivos multimedia en contenedores Azure Blob Storage, aprovechando la infraestructura nativa de la nube para lograr escalabilidad y rendimiento.

SAP Commerce Cloud proporciona una cuenta de almacenamiento de Azure para cada entorno. Si bien esta cuenta de almacenamiento se usa principalmente para conectar sistemas externos con los procesos de importación/exportación de datos de SAP Commerce, como las carpetas activas, también se puede aprovechar para almacenar todos los archivos multimedia para su instancia SAP Commerce. Esta flexibilidad hace que el almacenamiento Azure sea óptimo para una migración fluida de datos multimedia.

Estas estrategias de almacenamiento de medios se pueden configurar globalmente para todo el sistema o específicamente para carpetas de medios individuales.

  • La configuración global para Azure Blob Storage tiene este aspecto:
  • media.default.storage.strategy=windowsAzureBlobStorageStrategy
  • media.globalSettings.windowsAzureBlobStorageStrategy.connection=DefaultEndpointsProtocol=http;AccountName=yourAccountName;AccountKey=yourAccountKey
  • Para configurar carpetas multimedia específicas, utilice propiedades como esta:
  • media.folder.<folder-qualifier>.storage.strategy=windowsAzureBlobStorageStrategy
  • media.folder.<folder-qualifier>.connection=DefaultEndpointsProtocol=http;AccountName=yourAccountName;AccountKey=yourAccountKey
media storage strategies

Migración de medias desde on-premise a SAP Commerce Cloud

Para migrar archivos multimedia desde un sistema on-premise a la nube, asumimos que se migra globalmente de localFileMediaStorageStrategy a windowsAzureBlobStorageStrategy. El proceso implica transferir todos los archivos multimedia desde un sistema de archivos on-premise a Azure Blob Storage y lo desglosaremos paso a paso.

on-premise to ccv2 media migration

Cómo se calculan las ubicaciones de medias

Al migrar medios, es fundamental comprender cómo se calculan las ubicaciones de los archivos para cada estrategia.

Para localFileMediaStorageStrategy:

  • Ruta del archivo: <media-folder>/sys_master/<location>
  • <media-folder>: ruta raíz para los archivos multimedia, definida por media.replication.dirs; su valor predeterminado es ${HYBRIS_DATA_DIR}/media.
  • sys_master: subruta estándar añadida por LocalFileMediaStorageStrategy, donde master corresponde al ID del tenant.
  • <location>: atributo location del medio.

Para windowsAzureBlobStorageStrategy:

  • Ubicación del blob: https://<storage-account-name>.blob.core.windows.net/<container-name>/<location>
  • <storage-account-name>: nombre de la cuenta de Azure Storage.
  • <container-name>: nombre del contenedor de Azure donde se almacenan los blobs, creado como sys-master-<folder-qualifier>, donde sys-master es un prefijo estándar basado en el ID del tenant y <folder-qualifier> es el atributo qualifier de MediaFolder.
  • <location>: atributo location del medio.

Puede asignar medios desde el almacenamiento local al contenedor de almacenamiento Azure correcto utilizando la carpeta de medios y la información de ubicación.

Consideraciones al migrar medias

Si planea mover todos los archivos en una MediaFolder específica, es importante tener en cuenta cómo se construye el atributo de ubicación utilizando el localFileMediaStorageStrategy. Esto le ayudará a identificar los archivos que se copiarán del sistema de archivos local.

La ubicación se estructura de la siguiente manera:

location = <folder-path>/hxx/hxx/PK.<file-extension>

Dónde:

  • <folder-path> es el atributo path de MediaFolder.
  • hxx/hxx es una estructura de ruta de dos niveles generada automáticamente.
  • PK es la clave principal (PK) del medio.
  • <file-extension> se deriva del tipo MIME del medio.

Este desglose le permite crear una estrategia integral para migrar cada MediaFolder desde el almacenamiento local al contenedor Azure correspondiente.

Migración de medias paso a paso

Media Migration Steps

1. Consultar MediaFolders existentes

El primer paso es consultar todas las carpetas de medios existentes en su sistema SAP Commerce local. Utilice la siguiente consulta para recuperar carpetas multimedia y sus rutas:

select {qualifier}, {path} from {MediaFolder}

Resultados de ejemplo:

Qualifier Path
root NULL
images images
backofficethemes backoffice/themes

2. Preparar Azure Storage

SAP Commerce Cloud proporciona una cuenta de Azure Storage para cada entorno. Puede acceder a esta cuenta de almacenamiento utilizando su nombre y clave, a los que se puede acceder a través de SAP Cloud Portal.

Usar Microsoft Azure Storage Explorer para conectar y crear un SAS Token (Firma de acceso compartido) con acceso de escritura. Para cada carpeta multimedia, cree un contenedor Azure correspondiente con la siguiente convención de nomenclatura:

sys-master-<folder-qualifier>

Ejemplos:

  • sys-master-images
  • sys-master-impex
  • sys-master-backofficethemes

Puede crear estos contenedores manualmente a través de Azure Storage Explorer o mediante el siguiente comando:

azcopy make "https://<storage-account-name>.blob.core.windows.net/<container-name>?<SAS-token>"

3. Copiar medias a Azure

Para transferir archivos multimedia desde su entorno on-premise a Azure Blob Storage, utilice azcopy, una herramienta de Microsoft diseñada para manejar transferencias de archivos hacia y desde Azure.

El formato de comando general para copiar archivos multimedia es el siguiente:

azcopy copy "<media-folder>/sys_master/<folder-path>/*" "https://<storage-account-name>.blob.core.windows.net/<container-name>/<folder-path>?<SAS-Token>" --recursive

Ejemplos:

Carpeta de imágenes:

En este ejemplo, los atributos de calificador y ruta de MediaFolder tienen el mismo valor.

azcopy copy "<media-folder>/sys_master/images/*" "https://<storage-account-name>.blob.core.windows.net/sys-master-images/images?<SAS-Token>" --recursive

Carpeta de temas de Backoffice:

En este caso, los atributos de calificador y ruta de MediaFolder tienen valores diferentes.

azcopy copy "<media-folder>/sys_master/backoffice/themes/*" "https://<storage-account-name>.blob.core.windows.net/sys-master-backofficethemes/backoffice/themes?<SAS-Token>" --recursive

Caso especial: migración de la carpeta raíz

La carpeta raíz requiere atención especial porque sus archivos multimedia se almacenan directamente en sys_master, sin una subruta. Para evitar copiar archivos de otras carpetas multimedia, utilice un patrón más específico como:

azcopy copy "<media-folder>/sys_master/h*" "https://<storage-account-name>.blob.core.windows.net/sys-master-root?<SAS-Token>" --recursive

Esto solo copiará archivos cuya ubicación comience con una «h», correspondiente a la ruta generada automáticamente para los archivos en la carpeta raíz. Tenga en cuenta que si tiene otras carpetas multimedia que comienzan con «h», también se copiarán. Alternativamente, puede crear un script bash para iterar cada carpeta que comience con h seguida de solo dos caracteres y copiar cada uno individualmente:

for dir in <media-folder>/sys_master/h??; do 
   if [ -d "$dir" ]; then 
      azcopy copy "$dir" "https://<storage-account-name>.blob.core.windows.net/sys-master-root?<SAS-Token>" --recursive 
   fi 
done

4. Configurar Azure Storage en SAP Commerce Cloud

Para finalizar el proceso, confirme que el entorno SAP Commerce Cloud utiliza el windowsAzureBlobStorageStrategy. Asegúrese de que estén configuradas las siguientes propiedades:

media.default.storage.strategy=windowsAzureBlobStorageStrategy
media.globalSettings.windowsAzureBlobStorageStrategy.connection=DefaultEndpointsProtocol=http;AccountName=yourAccountName;AccountKey=yourAccountKey

Además, verifique que todos los registros de la base de datos relevantes para los medios (incluidos los atributos de ubicación y mediaFolder) se hayan migrado a la nube, asegurando que los archivos estén asignados correctamente en el nuevo entorno.

Automatización con Groovy

Para acelerar el proceso de migración, puede utilizar un script Groovy en la hAC (Hybris Administration Console) de su entorno on-premise. Este script genera los comandos azcopy necesarios para cada carpeta multimedia:

import de.hybris.platform.servicelayer.search.FlexibleSearchQuery
import de.hybris.platform.util.Config

final String AZURE_ACCOUNT_NAME = "<YOUR_ACCOUNT_NAME>"
final String SAS_TOKEN = "<YOUR_SAS_TOKEN>"

final String BASE_AZURE_URL = "https://${AZURE_ACCOUNT_NAME}.blob.core.windows.net"
final String BASE_LOCAL_PATH = Config.getParameter('media.replication.dirs') + "/sys_master"

def query = "SELECT {qualifier}, {path} FROM {MediaFolder}"
def fsQuery = new FlexibleSearchQuery(query)
fsQuery.setResultClassList([String.class, String.class])

flexibleSearchService.search(fsQuery).getResult().each { result ->
    def folderQualifier = result[0]
    def folderPath = result[1]
    def localFilesPattern = folderQualifier.equals("root") ? "h*" : "${folderPath}/*"
    def containerName = "sys-master-${folderQualifier}"
    def azurePath = folderQualifier.equals('root') ? "" : "/${folderPath}"

    println "# Commands to migrate folder: ${folderQualifier}:"
    println "azcopy make \"${BASE_AZURE_URL}/${containerName}?${SAS_TOKEN}\""
    println "azcopy copy \"${BASE_LOCAL_PATH}/${localFilesPattern}\" \"${BASE_AZURE_URL}/${containerName}${azurePath}?${SAS_TOKEN}\" --recursive"
}

Migración de Deltas para el Go Live

Como parte del proceso de migración, normalmente se realiza una transferencia inicial de todos los archivos multimedia días o semanas antes del go-live oficial para validar el entorno cloud. Sin embargo, durante este período intermedio, el sistema on-premise permanece activo y genera nuevos datos multimedia que deben incorporarse antes del cambio final. Para solucionarlo, se realiza una migración delta en la fecha de go-live, lo que garantiza que todos los archivos recién creados se transfieran a la nube. En lugar de copiar todos los archivos de nuevo, puede optimizar el proceso utilizando el comando azcopy sync, que detecta y copia solo los archivos que han cambiado, haciendo que la migración sea más rápida y eficiente.

Comando de ejemplo:

azcopy sync "<media-folder>/sys_master/images" "https://<storage-account-name>.blob.core.windows.net/sys-master-images/images?<SAS-Token>" --recursive

Conclusión

Migrar archivos multimedia a SAP Commerce Cloud puede ser complejo, pero es un proceso manejable con el enfoque adecuado. Si necesitas orientación y soporte especializado, el equipo de especialistas en SAP Commerce de Eturia puede ayudarte a planificar una migración fluida y adaptada a tus necesidades.

Hablemos de tu proyecto

Sin discurso comercial. Solo una conversación honesta sobre lo que tiene sentido para tu negocio.

Sin argumentos de venta. Simplemente una conversación honesta sobre lo que tiene sentido para su negocio.

SAP Commerce specialists collaborating in an office