Как перенести данные непосредственно из одного проекта Google Cloud Storage в другой?

Как перенести данные из одного проекта Google Cloud Storage в другой? Я понимаю, как загружать и как загружать, но я хочу передать непосредственно между проектами.

Ответ 1

Чтобы скопировать любой отдельный объект из одного местоположения GCS в другое, вы можете использовать команду копирования. Это можно сделать с помощью любого из наших общедоступных API или с помощью клиента командной строки gsutil.

С gsutil команду cp command можно использовать так:

gsutil cp gs://bucket1/obj gs://bucket2/obj2

Редактировать:
С тех пор, как я написал это, стала доступна служба облачного переноса Google, которая удобна для копирования целых сегментов между проектами GCS или для копирования целых сегментов из S3 в GCS. Вы можете узнать больше здесь.

Ответ 2

Откройте Веб-консоль Хранилище> Tranfer, чтобы создать новый перевод.

Выберите источник, из которого вы хотите скопировать. Как и в кратер-вейле, упомянутом выше, идентификаторы сегментов глобально уникальны (это ключ к решению). Поэтому, как только вы доберетесь до места назначения формы передачи, вы можете написать/вставить целевую корзину прямо в нее для ввода текста. Даже если это ведро из другого проекта. Он покажет вам зеленую иконку, как только цель будет подтверждена как существующее ведро. Вы можете продолжить форму снова, чтобы завершить настройку.

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

Ответ 3

Имена bucket в GCS уникальны во всех ваших проектах. Например, Project1 и Project2 не могут иметь ковши с именем "изображения", хотя у каждого из них есть папки внутри этих ковшей с именем "изображения".

Это может показаться ошибочным, поскольку gsutil может попросить вас выбрать проект для работы. Для команды копирования этот выбор можно игнорировать.

gsutil cp gs://bucket1/obj gs://bucket2/obj

позволит вам скопировать объект в Project1/bucket1 в Project2/bucket2

Ответ 4

Использование Google Cloud Shell

Перейдите к первому проекту, в котором есть корзина, которую вы хотели скопировать
gcloud config set project [PROJECT1 ID]

Сделал каталог, в который вы можете смонтировать это ведро
mkdir test

Смонтировать ведро в каталог
gcsfuse [BUCKET1] test

Переключитесь на второй проект, в котором было место, которое вы хотели заполнить
gcloud config set project [PROJECT2 ID]

Скопируйте содержимое новой папки во второе ведро.
gsutil cp -r/home/user/test gs://[BUCKET2]

Ответ 5

В соответствии с документами Moving Buckets.

Вы можете просто использовать gsutil.

gsutil cp -r gs://[SOURCE_BUCKET]/* gs://[DESTINATION_BUCKET]

примечание: _ если используется zsh. Удостоверьтесь, что вы завернули свой источник в одинарные кавычки. Потому что zsh попытается расширить шаблон до того, как gsutil его увидит. Смотрите здесь

Вы можете найти ссылку на gsutil на вкладке "Обзор" вашего браузера.

Ответ 6

Если вы хотите использовать консоль, следуйте @Martin van Dam answer.

Если вы хотите использовать оболочку:

Шаг 1. Откройте google cloud shell

Шаг 2. Запустите gcloud init и следуйте процессу, чтобы подключиться к облачному проекту, к которому принадлежит bucket1.

Шаг 3. запустите gsutil cp -r gs://[bucket1]/* gs://[bucket2]

Вы сделали!


* Теперь есть подвох! Если оба блока принадлежат одному и тому же проекту, эти шаги будут работать безупречно. Но в случае, если оба сегмента не принадлежат одному и тому same project или same google cloud account и тому same google cloud account. Это не сработает. Вам необходимо исправить разрешения.

Если они принадлежат одной учетной записи GCP:

Перейдите в " Storage > " Browser > "Выбрать корзину"> "Параметры"> " Edit bucket permissions > " add member > вставьте service account email id для проекта, которому принадлежит "bucket2"> установите роль "Хранилище". Storage Admin > Сохранить. Затем выполните gstuil cp.

Если они принадлежат отдельным учетным записям GCP:

Перейдите в " Storage > " Browser > "Выбрать корзину"> "Параметры"> " Edit bucket permissions корзины"> " add member > вставьте gmail id которому принадлежит проект, которому принадлежит "bucket2"> установите роль "Хранилище". Storage Admin > Сохранить. Затем выполните gstuil cp.

Ответ 7

Если у вас есть ключ или служебная учетная запись, которая дает вам доступ к обоим проектам, это очень просто и работает с небольшой скоростью, чтобы использовать gsutils.

Это то, что я сделал с моего локального Mac и синхронизировал терабайты данных за минуты (да, минуты, а не часы)

gsutil -m rsync -r gs://my/source/project/bucket/files/ gs://my/target/project/bucket/directory/

Ключом здесь является использование флага -m.

Проверьте официальные документы на [ https://cloud.google.com/storage/docs/gsutil/commands/rsync] для получения дополнительной информации.

Ответ 8

если вы хотите скопировать данные из одного проекта в другой, я попытался сделать что-то ниже, и он работает, [передайте файл из проекта 1, вычислите сервер engine1 в bucket1, загрузите его на проект 2, вычислите сервер двигателя 2 и загрузите его на ведро 2].
1. Перенесите данные в первый контейнер проекта /google с помощью gsutil.
2. Войдите в систему webui, cloud.google.com, выберите проект, когда вы передаете файл на шаге 1, и перейдите к хранилищу, и увидите там файл. выберите этот файл и установите флажок "Общий доступ" на правой стороне.
3. щелкните правой кнопкой мыши по общедоступной ссылке и выберите адрес ссылки для копирования.
4. Войдите в другой проект, вычислите сервер двигателя и используйте wget и ссылку, которую вы получите на шаге 3, чтобы это было. теперь вы можете снова использовать gsutil и загрузить файл в другой проект google storage bucket.
5. важный момент, пожалуйста, отключите общедоступную общую ссылку.

надеюсь, что это поможет.