我有一个测试云功能(CF),可以在更新Cloud Storage中的对象时触发。
exports.test_cf = (event, callback) => {
console.log("Test CF executed successfully");
callback();
}
使用以下功能部署以上功能:
gcloud functions deploy --runtime nodejs6 --trigger-resource [BUCKET-NAME] --trigger-event google.storage.object.archive --timeout=540s --verbosity=info
在存储桶上设置版本控制后,我使用gsutil
将文件复制到存储桶,如下所示:
gsutil cp <file> gs://[BUCKET-NAME]/
以上命令触发了CF。这是为什么?根据GCP文档,google.storage.archive
仅在更新时触发CF。
另一个问题:如何使用gsutil
更新存储桶中的对象?我看到了gsutil rewrite
,但它与更新不同。
答案 0 :(得分:1)
以上命令触发了CF。这是为什么?
您启用了存储桶版本控制,然后使用gsutil
命令在存储桶中复制文件。这样就可以在存储桶中获得文件的实时副本,并创建了该文件的存档版本,有关更多信息,请访问Object Versioning文档。您可以通过运行gsutil ls -a gs://[BUCKET_NAME]
命令来验证,有关更多信息,请访问Using Object Versioning > Listing archived object versions文档。因此,使用您所使用的-trigger-event google.storage.object.archive
,它将触发Google Cloud Storage Triggers > Object Archive文档"This event is sent when a live version of an object is archived or deleted."
中指定的Cloud Function。
另一个问题:如何使用gsutil更新存储桶中的对象?
如果要更新对象的元数据,可以访问Objects: update文档链接以获取更多信息。但是,如果您想自行更新对象,则可以从Google Cloud Console
或使用cp - Copy files and objects文档中指定的gsutil cp ...
命令上传对象的新版本。这样会将旧对象与新版本参考号一起存档,并使新版本的对象存在于存储桶中。