Есть ли способ регулярно создавать резервные копии одного бакета в другом, чтобы в случае удаления файлов из одного бакета их всегда можно было восстановить из другого?
решение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);