Compartir a través de


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

Nota:

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

Elija cómo proporcionará las credenciales de autorización.

  • Para autorizar con Azure Storage, use Microsoft Entra ID o un token SAS.

  • Para autorizar con AWS S3, use una clave de acceso de AWS y una clave de acceso secreta.

Autorización con Azure Storage

Consulte el artículo Introducción a AzCopy para descargar AzCopy y elija cómo proporcionará credenciales de autorización al servicio de almacenamiento.

Nota:

En los ejemplos de este artículo se supone que se autentica la identidad mediante el AzCopy login comando . AzCopy usa su 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 datos de blobs, puede anexar ese token a la dirección URL del recurso en cada comando de AzCopy.

Por ejemplo: https://mystorageaccount.blob.core.windows.net/mycontainer?<SAS-token>.

Autorización con AWS S3

Recopile la clave de acceso de AWS y la clave de acceso secreta y, a continuación, establezca estas variables de entorno:

Sistema operativo Command
Windows PowerShell:$env:AWS_ACCESS_KEY_ID=<access-key>
$env:AWS_SECRET_ACCESS_KEY=<secret-access-key>
En un terminal de comandos, 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.

Copiar 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 cuentas que tienen un espacio de nombres jerárquico. El acceso a varios protocolos en Data Lake Storage permite usar la misma sintaxis de dirección URL (blob.core.windows.net) en esas cuentas.

Copiar un objeto

Use la misma sintaxis de dirección 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 de estilo hospedado virtual (por ejemplo: http://bucket.s3.amazonaws.com).

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

Copiar un directorio

Use la misma sintaxis de dirección 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 --recursive marca para copiar archivos en todos los subdirectorios.

Copiar el contenido de un directorio

Puede copiar el contenido de un directorio sin copiar el directorio contenedor en sí mediante el símbolo 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 dirección 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 dirección 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 todos los buckets en una región S3 específica

Use la misma sintaxis de dirección 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 usa un conjunto diferente de convenciones de nomenclatura para los nombres de cubo en comparación con los contenedores de blobs de Azure. Puede leer sobre ellos aquí. Si decide copiar un grupo de cubos en una cuenta de almacenamiento de Azure, la operación de copia podría producir un error debido a las diferencias de nomenclatura.

AzCopy maneja dos de los problemas más comunes que pueden surgir: contenedores que contienen puntos y contenedores que contienen 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 por guiones y los guiones consecutivos por un único número que representa la cantidad de guiones consecutivos (por ejemplo, un cubo denominado my----bucket se convierte en my-4-bucket).

Además, a medida que AzCopy copia los archivos, comprueba si hay colisiones de nomenclatura e intenta resolverlos. Por ejemplo, si hay cubos con el nombre bucket-name y , AzCopy resuelve un cubo denominado bucket.name primero en bucket.name y, a continuación, en bucket-namebucket-name-2.

Control de las diferencias en los metadatos del objeto

AWS S3 y Azure permiten diferentes conjuntos de caracteres en los nombres de las claves de objeto. Puede leer sobre los caracteres que aws S3 usa aquí. En el lado de Azure, las claves de objetos blob siguen las reglas de nomenclatura de identificadores de C#.

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

Valor de marca Description
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 e incluye ese error en el recuento de errores que aparece en el resumen de transferencia.
RenameIfInvalid AzCopy resuelve la clave de metadatos no válida y copia el objeto en Azure mediante el par de valores de clave de metadatos resuelto. Para saber exactamente qué pasos lleva AzCopy para cambiar el nombre de las claves de objeto, consulte la sección How AzCopy renames object keys (Cómo AzCopy cambia el nombre de las claves de objeto ). Si AzCopy no puede cambiar el nombre de la clave, el objeto no se copia.

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

AzCopy realiza estos pasos:

  1. Reemplaza caracteres no válidos por '_'.

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

    Esta clave se usa para guardar el valor de metadatos original.

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

Especificar tipos de origen y destino

AzCopy usa el --from-to parámetro para definir explícitamente los tipos de recursos de origen y destino cuando se puede producir un error en la detección automática, como en escenarios de canalización o emuladores. Este parámetro ayuda a AzCopy a comprender el contexto de la transferencia y optimizar en consecuencia. Establezca este parámetro S3Blob en para indicar explícitamente que el comando está copiando de Amazon S3 a Azure Blob Storage.

Pasos siguientes

Busque más ejemplos en estos artículos:

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