tencent cloud

文档反馈

COS 触发器说明

最后更新时间:2024-04-19 16:44:05
    用户可以编写 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 存储桶相同的事件和前后缀规则仅可绑定 1 个函数。

    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
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持