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


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

AzCopy — это утилита командной строки, которую можно использовать для копирования блобов или файлов в учетную запись хранения или из нее. Эта статья поможет скопировать объекты, каталоги и контейнеры из Google Cloud Storage в хранилище BLOB-объектов Azure с помощью AzCopy.

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

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

  • Для авторизации с помощью Google Cloud Storage используйте ключ учетной записи службы.

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

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

Замечание

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

Если вы предпочитаете использовать маркер SAS для авторизации доступа к данным BLOB, вы можете добавить этот маркер к URL-адресу ресурса в каждой команде утилиты AzCopy. Например: 'https://<storage-account-name>.blob.core.windows.net/<container-name><SAS-token>'.

Авторизация с помощью Google Cloud Storage

Для авторизации с помощью Google Cloud Storage используйте ключ учетной записи службы. Сведения о создании ключа учетной записи службы см. в статье "Создание ключей учетной записи службы и управление ими".

После получения ключа службы установите GOOGLE_APPLICATION_CREDENTIALS переменную среды на абсолютный путь к файлу ключа учетной записи службы.

Операционная система Command
Виндоус set GOOGLE_APPLICATION_CREDENTIALS=<path-to-service-account-key>
Линукс export GOOGLE_APPLICATION_CREDENTIALS=<path-to-service-account-key>
macOS export GOOGLE_APPLICATION_CREDENTIALS=<path-to-service-account-key>

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

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

Подсказка

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

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

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

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

Syntax

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

Пример

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

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

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

Syntax

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

Пример

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

Замечание

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

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

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

Syntax

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

Пример

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

Копирование контейнера облачного хранилища

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

Syntax

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

Пример

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

Копирование всех контейнеров в проекте Google Cloud

Сначала задайте GOOGLE_CLOUD_PROJECT идентификатор проекта проекта Google Cloud.

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

Syntax

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

Пример

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

Копирование подмножества контейнеров в проекте Google Cloud

Сначала задайте GOOGLE_CLOUD_PROJECT идентификатор проекта проекта Google Cloud.

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

Syntax

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

Пример

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

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

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

AzCopy обрабатывает три наиболее распространенных проблемы, которые могут возникнуть: контейнеры, содержащие периоды, контейнеры, содержащие последовательные дефисы и контейнеры, содержащие подчеркивания. Имена контейнеров Google Cloud Storage могут содержать периоды и последовательные дефисы, но контейнер в Azure не может. AzCopy заменяет точки дефисами, а последовательные дефисы - числом, обозначающим количество последовательных дефисов (например, контейнер с именем my----bucket становится my-4-bucket). Если имя контейнера имеет символ подчеркивания (_), AzCopy заменяет символ подчеркивания дефисом. Например, именованный my_bucket контейнер становится my-bucket.

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

Google Cloud Storage имеет другой набор соглашений об именовании для имен объектов по сравнению с объектами blob Azure. Вы можете ознакомиться с ними здесь.

Служба хранилища Azure не разрешает имена объектов (или любой сегмент в пути виртуального каталога) заканчиваться замыкающими точками (например my-bucket...). Конечные точки обрезаются при выполнении операции копирования.

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

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

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

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

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

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

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

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

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

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

Укажите типы источника и назначения

AzCopy использует --from-to параметр для явного определения типов ресурсов источника и назначения, если автоматическое обнаружение может завершиться сбоем, например в сценариях трубопроводов или эмуляторах. Это помогает AzCopy понять контекст передачи и оптимизировать их соответствующим образом. Этот параметр GCPBlobможно задать явным образом, чтобы указать, что команда копируется из Google Cloud Storage в хранилище BLOB-объектов Azure.

Дальнейшие шаги

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

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