Поделиться через


Копирование данных из Amazon S3 в службу хранилища Azure с помощью AzCopy

AzCopy — это утилита командной строки, которую можно использовать для копирования блобов или файлов в учетную запись хранения или из неё. Эта статья помогает копировать объекты, каталоги и контейнеры из Amazon Web Services (AWS) S3 в хранилище BLOB-объектов Azure с помощью AzCopy.

Примечание.

AzCopy поддерживает стандартные URL-адреса в стиле виртуального узла или пути, определенные AWS. Например, https://bucket.s3.amazonaws.com или https://s3.amazonaws.com/bucket.

Выбор способа предоставления учетных данных авторизации

  • Чтобы авторизоваться в Azure Storage, используйте идентификатор Microsoft Entra или токен Подписанного доступа (SAS).

  • Для авторизации с помощью AWS S3 используйте ключ доступа AWS и секретный ключ доступа.

Авторизация с помощью службы хранилища Azure

См. статью "Начало работы с AzCopy" , чтобы скачать AzCopy и выбрать способ предоставления учетных данных авторизации службе хранилища.

Примечание.

В примерах этой статьи предполагается, что вы выполнили проверку подлинности удостоверения с помощью AzCopy login команды. Затем AzCopy использует учетную запись Microsoft Entra для авторизации доступа к данным в хранилище блобов.

Если вы предпочитаете использовать для авторизации доступа к данным большого двоичного объекта маркер SAS, маркер можно добавить к URL-адресу ресурса в каждой команде AzCopy.

Например: https://mystorageaccount.blob.core.windows.net/mycontainer?<SAS-token>.

Авторизация с помощью AWS S3

Соберите ключ доступа AWS и секретный ключ доступа, а затем задайте следующие переменные среды:

Операционная система Приказ
Виндоус PowerShell:$env:AWS_ACCESS_KEY_ID=<access-key>
$env:AWS_SECRET_ACCESS_KEY=<secret-access-key>
В командной строке используйте set AWS_ACCESS_KEY_ID=<access-key>.
set AWS_SECRET_ACCESS_KEY=<secret-access-key>
Линукс 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>

Эти учетные данные используются для создания предварительно подписанных URL-адресов, которые используются для копирования объектов.

Копирование объектов, каталогов и контейнеров

AzCopy использует API PUT Block From URL , поэтому данные копируются непосредственно между AWS S3 и серверами хранения. Эти операции копирования не используют пропускную способность сети компьютера.

Подсказка

Примеры в этом разделе заключают аргументы пути в одинарные кавычки (''). Используйте одинарные кавычки во всех командных оболочках, кроме командной оболочки Windows (cmd.exe). Если вы используете командную оболочку Windows (cmd.exe), заключите аргументы пути в двойные кавычки ("") вместо одинарных (").

Эти примеры также работают с учетными записями, имеющими иерархическое пространство имен. Доступ с несколькими протоколами в Data Lake Storage позволяет использовать один и тот же синтаксис URL-адресов (blob.core.windows.net) в этих учетных записях.

Копирование объекта

Используйте тот же синтаксис URL-адреса (blob.core.windows.net) для учетных записей с иерархическим пространством имен.

Синтаксис

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

Пример

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

Примечание.

Примеры в этой статье используют URL-адреса с путевым стилем для хранилищ AWS S3 (например: http://s3.amazonaws.com/<bucket-name>).

Вы также можете использовать URL-адреса в стиле виртуального хостинга (например: http://bucket.s3.amazonaws.com).

Дополнительные сведения о виртуальном размещении контейнеров см. в статье "Виртуальный хостинг контейнеров".

Копирование каталога

Используйте тот же синтаксис URL-адреса (blob.core.windows.net) для учетных записей с иерархическим пространством имен.

Синтаксис

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

Пример

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

Примечание.

В этом примере флаг --recursive используется для копирования файлов во всех вложенных каталогах.

Копирование содержимого каталога

Содержимое каталога можно скопировать без копирования самого каталога с помощью символа подстановочного знака (*).

Синтаксис

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

Пример

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

Копирование контейнера

Используйте тот же синтаксис URL-адреса (blob.core.windows.net) для учетных записей с иерархическим пространством имен.

Синтаксис

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

Пример

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

Скопировать все бакеты во всех регионах

Используйте тот же синтаксис URL-адреса (blob.core.windows.net) для учетных записей с иерархическим пространством имен.

Синтаксис

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

Пример

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

Копировать все бакеты в выбранном регионе S3

Используйте тот же синтаксис URL-адреса (blob.core.windows.net) для учетных записей с иерархическим пространством имен.

Синтаксис

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

Пример

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

Обработка различий в правилах именования объектов

AWS S3 имеет другой набор соглашений об именовании для имен корзин по сравнению с контейнерами BLOB-объектов Azure. Вы можете ознакомиться с ними здесь. Если вы решили скопировать группу контейнеров в учетную запись хранения Azure, операция копирования может завершиться ошибкой из-за различий именования.

AzCopy обрабатывает два наиболее распространенных проблемы, которые могут возникнуть; контейнеры, содержащие периоды и контейнеры, содержащие последовательные дефисы. Имена контейнеров AWS S3 могут содержать периоды и последовательные дефисы, но контейнер в Azure не может. AzCopy заменяет периоды дефисом и последовательными дефисами числом, которое представляет число последовательных дефисов (например, именованный my----bucket контейнер становится my-4-bucket.

Кроме того, как AzCopy копирует файлы, он проверяет наличие конфликтов именования и пытается устранить их. Например, если есть контейнеры с именем bucket-name и bucket.name, AzCopy сначала обрабатывает контейнер с именем bucket.name в bucket-name, а затем в bucket-name-2.

Обработка различий в метаданных объекта

AWS S3 и Azure разрешают различные наборы символов в именах ключей объектов. Здесь вы можете ознакомиться с символами, которые использует AWS S3. На стороне Azure ключи BLOB-объектов соответствуют правилам именования идентификаторов C#.

В рамках команды AzCopy copy можно указать значение для необязательного s2s-handle-invalid-metadata флага, указывающего способ обработки файлов, в которых метаданные файла содержат несовместимые имена ключей. В следующей таблице описывается каждое значение флага.

Значение флага Описание
ИсключитьЕслиНедействительно (параметр по умолчанию) Метаданные не включаются в передаваемый объект. AzCopy регистрирует предупреждение.
FailIfInvalid Объекты не копируются. AzCopy регистрирует ошибку и включает её в количество неудачных попыток, которое отображается в сводке по передаче.
RenameIfInvalid AzCopy разрешает недопустимый ключ метаданных и копирует объект в Azure, используя разрешённую пару ключ-значение метаданных. Сведения о том, какие действия выполняет AzCopy для переименования ключей объектов, см. в разделе "Как AzCopy переименовывает ключи объектов " ниже. Если AzCopy не удается переименовать ключ, объект не будет скопирован.

Как AzCopy переименовывает ключи объектов

AzCopy выполняет следующие действия:

  1. Заменяет недопустимые символы на "_".

  2. Добавляет строку rename_ в начало нового допустимого ключа.

    Этот ключ будет использоваться для сохранения исходного значения метаданных.

  3. Добавляет строку rename_key_ в начало нового допустимого ключа. Этот ключ будет использоваться для сохранения исходного недопустимого ключа метаданных. Этот ключ можно использовать для попытки восстановления метаданных в среде Azure, так как ключ метаданных сохраняется как значение в службе хранения объектов Blob.

Дальнейшие действия

Дополнительные примеры см. в следующих статьях:

Ознакомьтесь со статьями ниже, чтобы получить сведения о настройке параметров, оптимизации производительности и устранении проблем: