Copia de datos desde Amazon S3 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 desde Amazon Web Services (AWS) S3 a Azure Blob Storage mediante AzCopy.

Nota:

AzCopy admite direcciones URL estándar de estilo hospedado virtual o de estilo de ruta de acceso definidas por AWS. Por ejemplo: https://bucket.s3.amazonaws.com o https://s3.amazonaws.com/bucket.

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

  • Para la autorización con Azure Storage, use Microsoft Entra ID o un token de Firma de acceso compartido (SAS).

  • Para la autorización con AWS S3, use una clave de acceso de AWS y una clave de acceso secreta.

Autorización con Azure Storage

Vea el artículo Introducción a AzCopy para descargar AzCopy y elegir cómo proporcionará las credenciales de autorización para el servicio de almacenamiento.

Nota:

En los ejemplos de este artículo se supone que ha autenticado la identidad mediante el comando AzCopy login. Después, AzCopy usa la cuenta de Microsoft Entra para autorizar el acceso a los datos en Blob Storage.

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://mystorageaccount.blob.core.windows.net/mycontainer?<SAS-token>.

Autorización con AWS S3

Obtenga la clave de acceso de AWS y la clave de acceso secreta y luego establezca estas variables de entorno:

Sistema operativo Get-Help
Windows PowerShell:$env:AWS_ACCESS_KEY_ID=<access-key>
$env:AWS_SECRET_ACCESS_KEY=<secret-access-key>
En un símbolo del sistema, use: set AWS_ACCESS_KEY_ID=<access-key>
set AWS_SECRET_ACCESS_KEY=<secret-access-key>
Linux export AWS_ACCESS_KEY_ID=<access-key>
export AWS_SECRET_ACCESS_KEY=<secret-access-key>
macOS export AWS_ACCESS_KEY_ID=<access-key>
export AWS_SECRET_ACCESS_KEY=<secret-access-key>

Estas credenciales se usan para generar direcciones URL firmadas previamente que se usan para copiar objetos.

Copia de objetos, directorios y cubos

AzCopy usa la API Put Block From URL, por lo que los datos se copian directamente entre AWS S3 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://s3.amazonaws.com/<bucket-name>/<object-name>' 'https://<storage-account-name>.blob.core.windows.net/<container-name>/<blob-name>'

Ejemplo

azcopy copy 'https://s3.amazonaws.com/mybucket/myobject' 'https://mystorageaccount.blob.core.windows.net/mycontainer/myblob'

Nota

En los ejemplos de este artículo se usan direcciones URL de estilo de ruta de acceso para los cubos de AWS S3 (por ejemplo: http://s3.amazonaws.com/<bucket-name>).

También puede usar direcciones URL similares a las de hospedaje virtual (por ejemplo: http://bucket.s3.amazonaws.com).

Para más información sobre el hospedaje virtual de los cubos, vea Hospedaje virtual de cubos.

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://s3.amazonaws.com/<bucket-name>/<directory-name>' 'https://<storage-account-name>.blob.core.windows.net/<container-name>/<directory-name>' --recursive=true

Ejemplo

azcopy copy 'https://s3.amazonaws.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://s3.amazonaws.com/<bucket-name>/<directory-name>/*' 'https://<storage-account-name>.blob.core.windows.net/<container-name>/<directory-name>' --recursive=true

Ejemplo

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

Copia de un 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://s3.amazonaws.com/<bucket-name>' 'https://<storage-account-name>.blob.core.windows.net/<container-name>' --recursive=true

Ejemplo

azcopy copy 'https://s3.amazonaws.com/mybucket' 'https://mystorageaccount.blob.core.windows.net/mycontainer' --recursive=true

Copia de todos los cubos de todas las regiones

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://s3.amazonaws.com/' 'https://<storage-account-name>.blob.core.windows.net' --recursive=true

Ejemplo

azcopy copy 'https://s3.amazonaws.com' 'https://mystorageaccount.blob.core.windows.net' --recursive=true

Copia de todos los cubos de una región específica de S3

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://s3-<region-name>.amazonaws.com/' 'https://<storage-account-name>.blob.core.windows.net' --recursive=true

Ejemplo

azcopy copy 'https://s3-rds.eu-north-1.amazonaws.com' 'https://mystorageaccount.blob.core.windows.net' --recursive=true

Control de las diferencias en las reglas de nomenclatura de objetos

AWS S3 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 controla dos de los problemas más comunes que pueden surgir; cubos que contienen puntos y cubos que pueden contener guiones consecutivos. Los nombres de cubo de AWS S3 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).

Además, como AzCopy copia sobre los archivos, comprueba si hay conflictos de nombres e intenta resolverlos. Por ejemplo, si hay cubos con el nombre bucket-name y bucket.name, en AzCopy un cubo con el nombre bucket.name primero se resuelve como bucket-name y después como bucket-name-2.

Control de las diferencias en los metadatos de objetos

AWS S3 y Azure permiten distintos conjuntos de caracteres en los nombres de las claves de objeto. Aquí puede leer sobre los caracteres que se usan en AWS S3. 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: