备份GCS存储桶至一个归档类GCS存储桶。

3
GCS Transfer Service 是定期传输数据的好方法。如果要将一个存储桶同步到另一个存储桶,目标存储桶使用的是归档存储类型,应该如何设置合适的参数呢?
我的一个担忧是,由于服务正在检查相同的对象,可能会对归档类对象执行昂贵的操作。为了避免这些检查,我每天只复制在过去 24 小时内新增的文件。那么这个时间精度有多高?在作业启动时可能会出现几分钟的时间抖动吗,导致我错过某些文件吗?
1个回答

2

虽然“适当的设置”完全取决于您的业务需求。一个好的方法是使用在标准存储桶上创建/完成时触发的云函数,在您的第二个存储桶中创建该对象的副本。

您可以使用以下Python函数作为指南:

from google.cloud import storage
from google.cloud.storage.blob import Blob

def hello_gcs(event, context):
    client = storage.Client()
    source_bucket = client.get_bucket("my_source_bucket)
    dest_bucket = client.get_bucket("my_destination_bucket")
    filename = str(event['id']).rsplit('/',1)[0]
    blob = Blob.from_string("gs://" + filename)
    source_bucket.copy_blob(blob,dest_bucket)

我喜欢放弃传输服务的替代方法。这对于传输来说更加昂贵还是更便宜?此外,如果源文件被覆盖,目标端会发生什么情况--是否会在目标端进行早期删除(或者对象版本可以帮助我们保存)? - HoosierDaddy
根据文档所述,“早期删除费用适用于在最短存储期限之前覆盖或移动现有对象,因为这两个操作都会删除原始文件”。如果在原始存储桶上重写文件,则此函数将重写目标存储桶中的文件。如果需要,您仍然可以将对象的版本附加到归档存储桶中的名称中,从而完全避免在目标存储桶上检查读取文件。 - Chris32
1
关于“传输是否更加昂贵?如果您将存储桶与传输服务同步,它将读取目标存储桶中的所有对象,我理解这可能非常昂贵,因为它是归档类别。我的方法避免了这种情况,但您需要考虑Cloud Functions的额外费用,并自行比较价格。” - Chris32

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接