Резервное копирование Google Cloud Storage Bucket

Резервное копирование Google Cloud Storage Bucket

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

решение1

Для этого можно рассмотреть несколько вариантов.

Во-первых, вы можете создать задание по переносу, используяСлужба передачи данных на хранение(перейдите в «Хранилище» > «Передача»). Его можно настроить для автоматического резервного копирования данных из одного контейнера в другой (у вас также есть возможность настроить его для резервного копирования контейнеров AWS в Google Cloud Storage). Transfer — довольно гибкий инструмент, который, помимо прочего, позволяет вам определять файлы для передачи на основе префикса файла, времени изменения или целевых URL-адресов конкретных объектов.

Другим вариантом было бы использование gsutilкоманды для копирования или синхронизации файлов из одного бакета в другой. Если вы хотите автоматизировать этот процесс, вы можете добавить команду как cronjob на экземпляр и запускать ее в выбранное вами время/интервалы.

Например, чтобы скопировать все данные из исходного контейнера в целевой контейнер, можно использовать команду, подобную этой:

$ gsutil cp -r gs://SOURCE_BUCKET_NAME/* gs://DESTINATION_BUCKET_NAME/

В качестве альтернативы вы можете использовать gsutil rsync с ключом -r для синхронизации содержимого исходного контейнера с целевым контейнером. Например:

$ gsutil rsync -r gs://SOURCE_BUCKET_NAME gs://DESTINATION_BUCKET_NAME/

Если вы обеспокоены удалением файлов, стоит рассмотретьВерсионирование объектов облачного хранилища. Если эта функция включена, то при перезаписи или удалении объектов в корзине создается архивная версия исходного объекта, так что при необходимости в дальнейшем исходный объект может быть извлечен. Это по сути защищает объект от случайного удаления.

Стоит отметить, что при Object Versioning каждый архивированный объект занимает столько же места, сколько и версия живого объекта, и вы платите ту же сумму за архивированное хранилище, что и за живое хранилище. Архивированными объектами можно управлять (например, автоматически удалять по достижении определенного возраста) с помощьюУправление жизненным циклом объекта.

решение2

Вы можете настроить задание cron для автоматического резервного копирования с помощью Cloud Scheduler и Cloud Functions.

С помощью Node.js вы можете получить список имен файлов, как в этом коде:

const [sourceFiles] = await sourceBucket.getFiles({
    prefix: 'data/'
});

А затем скопируйте файлы в другой контейнер, как в этом коде:

let promises = [];
for (let fileName of sourceFileNames) {
  const copyFilePromise = sourceBucket.file(fileName).copy(destBucket.file(`${dateStr}/${fileName}`));
  promises.push(copyFilePromise);
}
await Promise.all(promises);

Связанный контент