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


См. статью Копирование данных из 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, используйте идентификатор Microsoft Entra или маркер подписанного URL-адреса (SAS).

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

Авторизация в службе хранилища Azure

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

Примечание.

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

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

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

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

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

Операционная система Get-Help
Windows 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>
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>

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

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

AzCopy использует блок размещения из API 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 содержит разные наборы соглашений об именовании для имен групп по сравнению с группами больших двоичных объектов Azure. Вы можете прочесть о них здесь. Если вы решили скопировать группу групп в учетную запись хранения Azure, операция копирования может завершиться ошибкой из-за различий в именах.

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

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

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

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

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

Значение флага Description
ExcludeIfInvalid (Параметр по умолчанию) Метаданные не включаются в передаваемый объект. AzCopy регистрирует предупреждение.
FailIfInvalid Объекты не копируются. AzCopy регистрирует ошибку и включает эту ошибку в число сбоев, которое отображается в сводке по перемещению.
RenameIfInvalid AzCopy разрешает недопустимый ключ метаданных и копирует объект в Azure с помощью разрешенной пары "ключ — значение" метаданных. Чтобы узнать, какие действия AzCopy выполняет для переименования ключей объектов, ознакомьтесь с разделом Как AzCopy переименовывает ключи объектов ниже. Если AzCopy не удается переименовать ключ, объект не будет скопирован.

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

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

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

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

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

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

Следующие шаги

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

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