首页 > 解决方案 > 更新对象时触发云函数

问题描述

我有一个测试云函数 (CF) 来触发更新云存储中的对象。

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了,但它与更新不同。

标签: google-cloud-platformgoogle-cloud-storagegoogle-cloud-functions

解决方案


以上命令触发了 CF。这是为什么?

您启用了存储桶版本控制,然后使用该gsutil命令复制存储桶中的文件。这使得该文件的实时副本在存储桶中可用并创建了它的存档版本,有关更多信息,您可以访问对象版本控制文档。您可以通过运行该命令来验证这一点gsutil ls -a gs://[BUCKET_NAME],有关更多信息,您可以访问使用对象版本控制 > 列出归档对象版本文档。因此,使用-trigger-event google.storage.object.archive您所使用的,它将触发 Cloud Function,因为它在Google Cloud Storage Triggers > Object Archive文档中指定,"This event is sent when a live version of an object is archived or deleted.".

另一个问题:如何使用 gsutil 更新存储桶中的对象?

如果要更新对象的元数据,可以访问对象:更新文档链接以获取更多信息。但是,如果您想自行更新对象,您可以通过cp - Copy files and objects文档中指定Google Cloud Console的命令或使用命令上传新版本的对象。这将使用新版本参考号归档旧对象,并使新版本的对象存在于存储桶中。gsutil cp ...


推荐阅读