我有一堆存储桶,它们在文件上传时向 Pub/Sub 主题发布通知。然后,我有一个订阅 Pub/Sub 主题的云函数,它将这些文件复制到其最终目标存储桶。对于大多数文件来说,这一切都很好,但是当我有大文件(> 1GB)时,它们无法复制。源存储桶是多区域的,目标存储桶是区域和近线的。
我的代码本质上是:
client = storage.Client()
src_bucket = client.get_bucket(src_bucket_name)
src_blob = src_bucket.get_blob(src_filename)
dst_bucket = client.get_bucket(dst_bucket_name)
dst_blob = dst_bucket.blob(dst_filename)
dst_blob.rewrite(src_blob)
Run Code Online (Sandbox Code Playgroud)
最初,云函数在 60 秒时超时,所以我认为这就是问题所在,但后来我将云函数超时设置为 540 秒,但该函数仍然超时。我让该函数重试 20 分钟,因此我可以看到该问题是可重复的。在提高云函数超时失败后,我阅读了 blob 文档,发现 blob.rewrite 也有 60 秒的默认超时,因此我也将其提高到 540 秒,但这仍然超时。
此时,我不确定我错过了什么。这是超时问题吗?或者这与发布/订阅发布多条消息有关,以便我可以有多个云功能尝试同时制作相同的副本?或者是否有更好的方法在存储桶之间自动移动大文件?
python google-cloud-storage google-cloud-platform google-cloud-functions