Copia de datos de Google Cloud Storage a Azure Storage con AzCopy

AzCopy es una utilidad de línea de comandos que puede usar para copiar blobs o archivos a una cuenta de almacenamiento o desde una cuenta de almacenamiento. Este artículo le ayuda a copiar objetos, directorios y cubos de Google Cloud Storage a Azure Blob Storage mediante AzCopy.

Elección del modo de proporcionar las credenciales de autorización

  • Para autorizar con Azure Storage, use Microsoft Entra ID o un token de firma de acceso compartido (SAS).

  • Para la autorización con Google Cloud Storage, use una clave de cuenta de servicio.

Autorización con Azure Storage

Vea el artículo Introducción a AzCopy para descargar AzCopy y obtener información sobre las formas de proporcionar credenciales de autorización para el servicio de almacenamiento.

Nota:

En los ejemplos de este artículo se da por hecho que ha proporcionado credenciales de autorización mediante Microsoft Entra ID.

Si prefiere usar un token de SAS para autorizar el acceso a los datos de blob, puede anexar ese token a la dirección URL de recursos en cada comando AzCopy. Por ejemplo: 'https://<storage-account-name>.blob.core.windows.net/<container-name><SAS-token>'.

Autorización con Google Cloud Storage

Para la autorización con Google Cloud Storage, usará una clave de cuenta de servicio. Para obtener información acerca de cómo crear una clave de cuenta de servicio, consulte Crea y administra claves de cuentas de servicio.

Después de obtener una clave de servicio, establezca la variable de entorno GOOGLE_APPLICATION_CREDENTIALS en una ruta de acceso absoluta al archivo de clave de cuenta de servicio:

Sistema operativo Get-Help
Windows set GOOGLE_APPLICATION_CREDENTIALS=<path-to-service-account-key>
Linux export GOOGLE_APPLICATION_CREDENTIALS=<path-to-service-account-key>
macOS export GOOGLE_APPLICATION_CREDENTIALS=<path-to-service-account-key>

Copia de objetos, directorios y cubos

AzCopy usa la API Put Block From URL, por lo que los datos se copian directamente entre Google Cloud Storage y los servidores de almacenamiento. En estas operaciones de copia no se usa el ancho de banda de red del equipo.

Sugerencia

En los ejemplos de esta sección se delimitan los argumentos de ruta de acceso con comillas simples (''). Use comillas simples en todos los shells de comandos excepto en el shell de comandos de Windows (cmd.exe). Si usa un shell de comandos de Windows (cmd.exe), incluya los argumentos de la ruta de acceso entre comillas dobles ("") en lugar de comillas simples ('').

Estos ejemplos también funcionan con las cuentas que tienen un espacio de nombres jerárquico. El acceso multiprotocolo en Data Lake Storage le permite usar la misma sintaxis de URL (blob.core.windows.net) en esas cuentas.

Copia de un objeto

Use la misma sintaxis de URL (blob.core.windows.net) para las cuentas que tienen un espacio de nombres jerárquico.

Sintaxis

azcopy copy 'https://storage.cloud.google.com/<bucket-name>/<object-name>' 'https://<storage-account-name>.blob.core.windows.net/<container-name>/<blob-name>'

Ejemplo

azcopy copy 'https://storage.cloud.google.com/mybucket/myobject' 'https://mystorageaccount.blob.core.windows.net/mycontainer/myblob'

Copia de un directorio

Use la misma sintaxis de URL (blob.core.windows.net) para las cuentas que tienen un espacio de nombres jerárquico.

Sintaxis

azcopy copy 'https://storage.cloud.google.com/<bucket-name>/<directory-name>' 'https://<storage-account-name>.blob.core.windows.net/<container-name>/<directory-name>' --recursive=true

Ejemplo

azcopy copy 'https://storage.cloud.google.com/mybucket/mydirectory' 'https://mystorageaccount.blob.core.windows.net/mycontainer/mydirectory' --recursive=true

Nota

En este ejemplo se anexa la marca --recursive para copiar archivos en todos los subdirectorios.

Copia de los contenidos de un directorio

Puede copiar el contenido de un directorio sin copiar el propio directorio contenedor mediante el carácter comodín (*).

Sintaxis

azcopy copy 'https://storage.cloud.google.com/<bucket-name>/<directory-name>/*' 'https://<storage-account-name>.blob.core.windows.net/<container-name>/<directory-name>' --recursive=true

Ejemplo

azcopy copy 'https://storage.cloud.google.com/mybucket/mydirectory/*' 'https://mystorageaccount.blob.core.windows.net/mycontainer/mydirectory' --recursive=true

Copia de un cubo de Cloud Storage

Use la misma sintaxis de URL (blob.core.windows.net) para las cuentas que tienen un espacio de nombres jerárquico.

Sintaxis

azcopy copy 'https://storage.cloud.google.com/<bucket-name>' 'https://<storage-account-name>.blob.core.windows.net' --recursive=true

Ejemplo

azcopy copy 'https://storage.cloud.google.com/mybucket' 'https://mystorageaccount.blob.core.windows.net' --recursive=true

Copia de todos los cubos en un proyecto de Google Cloud

En primer lugar, establezca el valor de GOOGLE_CLOUD_PROJECT en el identificador del proyecto de Google Cloud.

Use la misma sintaxis de URL (blob.core.windows.net) para las cuentas que tienen un espacio de nombres jerárquico.

Sintaxis

azcopy copy 'https://storage.cloud.google.com/' 'https://<storage-account-name>.blob.core.windows.net' --recursive=true

Ejemplo

azcopy copy 'https://storage.cloud.google.com/' 'https://mystorageaccount.blob.core.windows.net' --recursive=true

Copia de un subconjunto de cubos en un proyecto de Google Cloud

En primer lugar, establezca el valor de GOOGLE_CLOUD_PROJECT en el identificador del proyecto de Google Cloud.

Copia de un subconjunto de cubos mediante un símbolo comodín (*) en el nombre del cubo. Use la misma sintaxis de URL (blob.core.windows.net) para las cuentas que tienen un espacio de nombres jerárquico.

Sintaxis

azcopy copy 'https://storage.cloud.google.com/<bucket*name>' 'https://<storage-account-name>.blob.core.windows.net' --recursive=true

Ejemplo

azcopy copy 'https://storage.cloud.google.com/my*bucket' 'https://mystorageaccount.blob.core.windows.net' --recursive=true

Control de las diferencias en las reglas de nomenclatura de cubos

Google Cloud Storage tiene otro conjunto de convenciones de nomenclatura para los nombres de cubo, en comparación con los contenedores de blobs de Azure. Aquí puede leer más al respecto. Si elige copiar un grupo de cubos en una cuenta de Azure Storage, es posible que se produzca un error en la operación de copia debido a las diferencias de nomenclatura.

AzCopy se encarga de tres de los problemas más comunes que pueden surgir; cubos que contienen puntos, cubos que contienen guiones consecutivos y cubos que contienen guiones bajos. Los nombres de cubo de Google Cloud Storage pueden contener puntos y guiones consecutivos, pero un contenedor de Azure no. AzCopy reemplaza los puntos con guiones y los guiones consecutivos con un número que representa el número de guiones consecutivos (por ejemplo: un cubo denominado my----bucket se convierte en my-4-bucket). Si el nombre del cubo tiene un guion bajo (_), AzCopy lo reemplaza por un guion. Por ejemplo, un cubo de nombre my_bucket se convierte en my-bucket.

Control de las diferencias en las reglas de nomenclatura de objetos

Google Cloud Storage tiene otro conjunto de convenciones de nomenclatura para los nombres de objeto, en comparación con los blobs de Azure. Aquí puede leer más al respecto.

Azure Storage no permite que los nombres de objeto (o cualquier segmento de la ruta de acceso del directorio virtual) terminen con puntos finales (por ejemplo, my-bucket...). Los puntos finales se eliminan cuando se realiza la operación de copia.

Control de las diferencias en los metadatos de objetos

Google Cloud Storage y Azure permiten distintos conjuntos de caracteres en los nombres de las claves de objeto. Aquí puede leer sobre los metadatos en Google Cloud Storage. En Azure, las claves de objeto de blob se adhieren a las reglas de nomenclatura para los identificadores de C#.

Como parte de un comando copy de AzCopy, puede proporcionar un valor opcional para la marca s2s-handle-invalid-metadata que especifique cómo quiere controlar los archivos donde los metadatos del archivo contienen nombres de clave no compatibles. En la tabla siguiente se describe cada valor de marca.

Valor de marca Descripción
ExcludeIfInvalid (Opción predeterminada) Los metadatos no se incluyen en el objeto transferido. AzCopy registra una advertencia.
FailIfInvalid Los objetos no se copian. AzCopy registra un error y lo incluye en el recuento de errores que aparece en el resumen de la transferencia.
RenameIfInvalid AzCopy resuelve la clave de metadatos no válida y copia el objeto en Azure mediante el par clave-valor de metadatos resuelto. Para saber exactamente qué pasos realiza AzCopy para cambiar el nombre de las claves de objeto, vea la sección Cómo cambia AzCopy el nombre de las claves de objeto más adelante. Si AzCopy no puede cambiar el nombre de la clave, el objeto no se copiará.

Cómo cambia AzCopy el nombre de las claves de objeto

AzCopy realiza estos pasos:

  1. Reemplaza los caracteres no válidos con "_".

  2. Agrega la cadena rename_ al principio de una nueva clave válida.

    Esta clave se usará para guardar el valor de los metadatos originales.

  3. Agrega la cadena rename_key_ al principio de una nueva clave válida. Esta clave se usará para guardar la clave no válida de los metadatos originales. Puede usar esta clave para intentar recuperar los metadatos en Azure, ya que la clave de metadatos se conserva como un valor en el servicio Blob Storage.

Pasos siguientes

Encuentre más ejemplos en estos artículos:

Consulte estos artículos para configurar opciones, optimizar el rendimiento y solucionar problemas: