OSS 触发器概述

更新时间:
复制 MD 格式

OSS 与函数计算集成后,OSS 事件能触发相关函数执行,实现对 OSS 中的数据的自定义处理。本文介绍函数计算支持的 OSS 触发器的使用限制、事件类型及触发规则。

背景信息

OSS 和函数计算通过 OSS 触发器实现无缝集成,可以编写函数对 OSS 事件进行自定义处理。当 OSS 捕获到指定类型的事件后,会自动触发关联的函数执行。例如,设置函数处理文件上传事件,当通过PutObject接口上传图片到 OSS 后,关联的函数会自动执行来处理该图片。

OSS 和函数计算集成后,可以调用函数处理图像或音频数据,再将结果写入存储服务。只需关注函数逻辑的编写,系统会以可靠、大规模并行的方式处理数据。

OSS 触发器使用限制

OSS 事件定义

当 OSS 系统捕获到相关事件后,会将事件信息编码为 JSON 字符串,传递给事件处理函数。OSS 事件通知格式的详细信息,请参见消息通知

已支持的 OSS 事件定义如下表所示。一种事件类型对应一个 ObjectCreated、ObjectRemoved 或 ObjectModified 类型的 API,调用该 API 并执行成功后会触发函数执行一次。

事件类型

事件名称

说明

ObjectCreated

oss:ObjectCreated:PutObject

调用PutObject接口上传文件。更多信息,请参见PutObject

oss:ObjectCreated:PutSymlink

调用PutSymlink接口针对 OSS 上的 TargetObject 创建软链接,可以通过该软链接访问 TargetObject。更多信息,请参见PutSymlink

oss:ObjectCreated:PostObject

调用PostObject接口使用 HTML 表单上传文件到指定的 Bucket。更多信息,请参见PostObject

oss:ObjectCreated:CopyObject

调用CopyObject接口拷贝一个在 OSS 上已经存在的对象。更多信息,请参见CopyObject

oss:ObjectCreated:InitiateMultipartUpload

使用MultipartUpload模式传输数据前,必须先调用InitiateMultipartUpload接口来通知 OSS 初始化一个 MultipartUpload 事件。更多信息,请参见InitiateMultipartUpload

oss:ObjectCreated:UploadPart

初始化一个 MultipartUpload 事件之后,可以根据指定的对象名和 Upload ID 来分块(Part)上传数据。更多信息,请参见UploadPart

oss:ObjectCreated:UploadPartCopy

UploadPartCopy通过从已存在的 Object 中拷贝数据来上传一个 Part。更多信息,请参见UploadPartCopy

oss:ObjectCreated:CompleteMultipartUpload

将所有数据 Part 上传完成后,需调用CompleteMultipartUpload接口来完成整个文件的 MultipartUpload。更多信息,请参见CompleteMultipartUpload

oss:ObjectCreated:AppendObject

调用AppendObject接口以追加写的方式上传文件。更多信息,请参见AppendObject

oss:ObjectCreated:*

调用任何上述 ObjectCreated 类型的 API 执行成功后都会触发函数。

ObjectRemoved

oss:ObjectRemoved:DeleteObject

调用DeleteObject接口删除某个对象。更多信息,请参见DeleteObject

oss:ObjectRemoved:DeleteObjects

调用DeleteMultipleObjects接口批量删除文件。更多信息,请参见DeleteMultipleObjects

oss:ObjectRemoved:AbortMultipartUpload

调用AbortMultipartUpload接口可以根据用户提供的 Upload ID 终止其对应的 MultipartUpload 事件。更多信息,请参见AbortMultipartUpload

ObjectModified

oss:ObjectModified:UpdateObjectMeta

调用UpdateObjectMeta接口修改某个对象的属性。

说明

目前,支持该事件的地域包括:华东 1(杭州)、华东 2(上海)、华北 1(青岛)、华北 2(北京)、华北 3(张家口)、华北 5(呼和浩特)、华南 1(深圳)和西南 1(成都)。

ObjectReplication

oss:ObjectReplication:ObjectCreated

数据复制过程涉及的写入操作。

oss:ObjectReplication:ObjectModified

数据复制过程涉及的覆盖操作。

oss:ObjectReplication:ObjectRemoved

数据复制过程涉及的删除操作。

OSS 触发器触发规则

避免循环触发

警告

使用 OSS 触发器时,请注意避免循环触发。例如,OSS 的某个 Bucket 上传文件事件触发函数执行,函数执行后生成了一个或多个文件再写回到 OSS 的 Bucket,这个写入动作又触发了函数执行,形成链状循环。

为了避免循环触发函数产生不必要的费用,建议配置文件前缀或文件后缀进行隔离。例如,将触发函数的文件前缀设置为src,函数执行完成后生成文件的文件前缀设置为dst,这样生成的文件不会再次触发函数。如果不配置文件前缀和文件后缀,则表示匹配任意文件。具体操作,请参见步骤一:创建OSS触发器

原生 OSS 触发器配置规则

为避免在同一个 Bucket 下创建重复的触发器导致单个事件同时触发多个触发器,系统在创建触发器时会进行配置冲突检测。如果新建触发器的触发事件、文件前缀和文件后缀的组合与已有触发器存在重叠,则创建失败。

配置触发器时,请遵循以下原则:

  • 同一 Bucket 下,每个触发器的"触发事件 + 文件前缀 + 文件后缀"组合应保持唯一。

  • 文件前缀和文件后缀使用通配匹配方式,未配置前缀或后缀时表示匹配任意值。

说明

配置文件前缀和文件后缀时,建议合理划分文件命名空间,避免因匹配范围重叠导致触发器创建失败。

如果一个 OSS 事件类型可以触发不同的函数进行不同的处理,即为不同的函数配置相同的触发条件,可以创建 EventBridge 类别的 OSS 触发器

常见问题

相关文档