有没有办法可以定期将一个存储桶备份到另一个存储桶中,以便如果文件从一个存储桶中删除,总是可以从另一个存储桶中恢复?
答案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/
如果你担心删除文件,那么值得研究一下云存储对象版本控制。如果启用此功能,当存储桶中的对象被覆盖或删除时,将创建原始对象的存档版本,以便以后需要时可以检索原始对象。这实质上可以保护对象免遭意外删除。
值得注意的是,对于对象版本控制,每个存档对象占用的空间与实时对象版本一样多,并且存档存储的费用与实时存储的费用相同。存档对象可以通过以下方式进行管理(例如,当它们达到一定年龄时自动删除):对象生命周期管理。
答案2
您可以使用 Cloud Scheduler 和 Cloud Functions 设置 cron 作业以进行自动备份。
使用 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);