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

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

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

  • Чтобы авторизоваться с помощью служба хранилища Azure, используйте идентификатор Microsoft Entra или маркер подписанного URL-адреса (SAS).

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

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

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

Примечание.

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

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

Авторизация в Google Cloud Storage

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

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

Операционная система Get-Help
Windows set GOOGLE_APPLICATION_CREDENTIALS=<path-to-service-account-key>
Linux export GOOGLE_APPLICATION_CREDENTIALS=<path-to-service-account-key>
macOS export GOOGLE_APPLICATION_CREDENTIALS=<path-to-service-account-key>

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

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

Совет

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

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

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

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

Синтаксис

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) для учетных записей, имеющих иерархическое пространство имен.

Синтаксис

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 для копирования файлов во всех подкаталогах.

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

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

Синтаксис

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) для учетных записей, имеющих иерархическое пространство имен.

Синтаксис

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 в качестве значения параметра GOOGLE_CLOUD_PROJECT.

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

Синтаксис

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 в качестве значения параметра GOOGLE_CLOUD_PROJECT.

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

Синтаксис

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

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

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

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

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

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

Google Cloud Storage и Azure позволяют использовать разные наборы символов в именах ключей объектов. С информацией о метаданных в Google Cloud Storage можно ознакомиться здесь. На стороне 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-объектов.

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

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

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