Есть ли способ регулярно выполнять резервное копирование одной корзины в другую, чтобы в случае удаления файлов из одной корзины их всегда можно было восстановить из другой?
Для этого можно рассмотреть несколько вариантов.
Во-первых, вы можете создать задание передачи, используя Служба передачи хранилища (перейдите к «Хранение»> «Передача»). Это можно настроить для автоматического резервного копирования данных из одной корзины в другую (у вас также есть возможность настроить это для резервного копирования корзин AWS в Google Cloud Storage). Передача - это довольно гибкий инструмент, который, среди прочего, позволяет вам определять файлы для передачи на основе префикса файла, времени изменения или целевых URL-адресов конкретных объектов.
Другой вариант - использовать gsutil
команда для копирования или синхронизации файлов из одной корзины в другую. Если вы хотите автоматизировать этот процесс, вы можете добавить команду в качестве задания cron в экземпляр и запускать ее через выбранные вами время / интервалы.
Например, чтобы скопировать все, что находится в исходном сегменте, в целевой сегмент, вы можете использовать команду, подобную этой:
$ 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/
Если вас беспокоит удаление файлов, стоит изучить Управление версиями объектов облачного хранилища. Если эта функция включена, если объекты в корзине перезаписываются или удаляются, создается заархивированная версия исходного объекта, так что при необходимости позже исходный объект может быть получен. Это существенно защищает объект от случайного удаления.
При управлении версиями объектов стоит отметить, что каждый заархивированный объект занимает столько же места, сколько и версия живого объекта, и за архивное хранилище взимается такая же сумма, как и за живое хранилище. Заархивированными объектами можно управлять (например, автоматически удалять по достижении определенного возраста) с помощью Управление жизненным циклом объекта.
Вы можете настроить задание 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);
Я также написал блог о том, как настроить все решение для автоматического резервного копирования: https://medium.com/@anthonychiu/backup-cloud-storage-data-with-cloud-functions-77ee01f4ec02