有奖捉虫:云通信与企业服务文档专题,速来> HOT
用户可以编写 SCF 函数来处理 COS Bucket 中的对象创建和对象删除事件。COS 可将事件发布给 SCF 函数并将事件数据作为参数来调用该函数。用户可以在 COS Bucket 中添加存储桶通知配置,该配置可标识触发函数的事件类型和希望调用的函数名称等信息。
COS 触发器具有以下特点:
Push 模型 COS 会监控指定的 Bucket 动作(事件类型)并调用相关函数,将事件数据推送给 SCF 函数。在推模型中使用 Bucket 通知来保存 COS 的事件源映射。
异步调用 COS 始终使用异步调用类型来调用函数,结果不会返回给调用方。有关调用类型的更多信息,请参阅 调用类型

COS 触发器属性

COS Bucket(必选):配置的 COS Bucket,仅支持选择同地域下的 COS 存储桶。
事件类型(必选):支持 “文件上传” 和 “文件删除”、以及更细粒度的上传和删除事件,具体事件类型见下表。事件类型决定了触发器何时触发云函数,例如选择 “文件上传” 时,会在该 COS Bucket 中有文件上传时触发该函数。
事件类型
描述
cos:ObjectCreated:*
以下提到的所有上传事件均可触发云函数。
cos:ObjectCreated:Put
使用 Put Object 接口创建文件时触发云函数。
cos:ObjectCreated:Post
使用 Post Object 接口创建文件时触发云函数。
cos:ObjectCreated:Copy
使用 Put Object - Copy 接口创建文件时触发云函数。
cos:ObjectCreated:CompleteMultipartUpload
使用 CompleteMultipartUpload 接口创建文件时触发云函数。
cos:ObjectCreated:Origin
通过 COS 回源 创建对象时触发云函数。
cos:ObjectCreated:Replication
通过跨区域复制创建对象时触发云函数。
cos:ObjectRemove:*
以下提到的所有删除事件均可触发云函数。
cos:ObjectRemove:Delete
在未开启版本管理的 Bucket 下使用 Delete Object 接口删除的 Object,或者使用 versionid 删除指定版本的 Object 时触发云函数。
cos:ObjectRemove:DeleteMarkerCreated
在开启或者暂停版本管理的 Bucket 下使用 Delete Object 接口删除的 Object 时触发云函数。
cos:ObjectRestore:Post
创建了归档恢复的任务时触发云函数。
cos:ObjectRestore:Completed
完成归档恢复任务时触发云函数。
前缀过滤(可选):前缀过滤通常用于过滤指定目录下的文件事件。例如,前缀过滤为 test/,则仅 test/ 目录下的文件事件才可以触发函数,hello/ 目录下的文件事件不触发函数。
后缀过滤(可选):后缀过滤通常用于过滤指定类型或后缀的文件事件。例如,后缀过滤为 .jpg,则仅 .jpg 结尾的文件的事件才可以触发函数,.png 结尾的文件事件不触发函数。

COS 触发器使用限制

为了避免 COS 的事件生产投递出现错误,COS 针对每个 Bucket 的每个事件(如文件上传/文件删除等)和前后缀过滤的组合,限制同一组规则只能绑定一个可触发的函数。因此,在您创建 COS 触发器时,请不要针对同一个 COS Bucket 配置相同的规则。例如,您可以为函数 A 配置 test Bucket 的 “Created: * ” 事件触发(未配置过滤规则),那么该 test Bucket 的上传事件不能再绑定到其他函数,这些事件包含(Created:Put、Created:Post等),但是您可以为函数 B 配置 test Bucket 的 “ObjectRemove” 事件触发。
当使用前后缀过滤规则时,为了保证同一个 Bucket 触发事件的唯一性,需要注意同一 Bucket 无法使用重叠前缀、重叠后缀或前缀和后缀的重叠组合为相同的事件类型定义筛选规则。例如,当您给函数 A 配置了 test Bucket 的 “Created: * ” 和前缀过滤为 “Log” 的事件触发,那么该 test Bucket下就不能再创建 “Created: * ” 和前缀过滤为 “Log” 的事件触发。
目前 COS 触发器仅支持同地域 COS Bucket 事件触发,即广州区创建的 SCF 函数,在配置 COS 触发器时,仅支持选择广州区(华南)的 COS Bucket。如果您想要使用特定地域的 COS Bucket 事件来触发 SCF 函数,可以通过在对应地域下创建函数来实现。
COS 触发器有 SCF 侧和 COS 侧两个维度限制:
SCF 侧限制:云函数单函数最多可关联10个 COS 触发器。
COS 侧限制:单个 COS 存储桶最多支持关联10个触发器。

COS 触发器的事件消息结构

在指定的 COS Bucket 发生对象创建或对象删除事件时,会将类似以下的 JSON 格式事件数据发送给绑定的 SCF 函数。
{
"Records": [{
"cos": {
"cosSchemaVersion": "1.0",
"cosObject": {
"url": "http://testpic-1253970026.cos.ap-chengdu.myqcloud.com/testfile",
"meta": {
"x-cos-request-id": "NWMxOWY4MGFfMjViMjU4NjRfMTUyMVxxxxxxxxx=",
"Content-Type": "",
"x-cos-meta-mykey": "myvalue"
},
"vid": "",
"key": "/1253970026/testpic/testfile",
"size": 1029
},
"cosBucket": {
"region": "cd",
"name": "testpic",
"appid": "1253970026"
},
"cosNotificationId": "unkown"
},
"event": {
"eventName": "cos:ObjectCreated:*",
"eventVersion": "1.0",
"eventTime": 1545205770,
"eventSource": "qcs::cos",
"requestParameters": {
"requestSourceIP": "192.168.15.101",
"requestHeaders": {
"Authorization": "q-sign-algorithm=sha1&q-ak=xxxxxxxxxxxxxx&q-sign-time=1545205709;1545215769&q-key-time=1545205709;1545215769&q-header-list=host;x-cos-storage-class&q-url-param-list=&q-signature=xxxxxxxxxxxxxxx"
}
},
"eventQueue": "qcs:0:scf:cd:appid/1253970026:default.printevent.$LATEST",
"reservedInfo": "",
"reqid": 179398952
}
}]
}
数据结构内容详细说明如下:
结构名
内容
Records
列表结构,可能有多条消息合并在列表中。
event
记录事件信息,包括事件版本、事件源、事件名称、时间、队列信息、请求参数、请求 ID。
cos
记录事件对应的 COS 信息。
cosBucket
记录具体事件发生的 Bucket,包含 Bucket 名称、地域、所属用户 APPID。APPID 可前往 账号信息 页面获取。
cosObject
记录具体事件发生的对象,包含对象文件路径、大小、自定义元数据、访问 URL。

相关示例

以下为 Java 语言的 COS 触发器示例,您可参考示例进行使用:
https://github.com/tencentyun/scf-demo-java/blob/master/src/main/java/example/Cos.java