OSS 与函数计算集成后,OSS 事件能触发相关函数执行,实现对 OSS 中的数据的自定义处理。本文介绍函数计算支持的 OSS 触发器的使用限制、事件类型及触发规则。
背景信息
OSS 和函数计算通过 OSS 触发器实现无缝集成,可以编写函数对 OSS 事件进行自定义处理。当 OSS 捕获到指定类型的事件后,会自动触发关联的函数执行。例如,设置函数处理文件上传事件,当通过PutObject接口上传图片到 OSS 后,关联的函数会自动执行来处理该图片。
OSS 和函数计算集成后,可以调用函数处理图像或音频数据,再将结果写入存储服务。只需关注函数逻辑的编写,系统会以可靠、大规模并行的方式处理数据。
OSS 触发器使用限制
-
仅EventBridge 类别的 OSS 触发器支持配置多个文件前缀和文件后缀。
-
原生 OSS 触发器和EventBridge 类别的 OSS 触发器配置的文件前缀和文件后缀均不支持正则匹配。
-
仅EventBridge 类别的 OSS 触发器支持在一个 Bucket 内关联超过 10 个以上的 OSS 触发器。
一般情况下,不推荐一个 Bucket 下关联 10 个以上的触发器。建议创建新的 Bucket,并基于新的 Bucket 创建触发器。
-
原生 OSS 触发器要求函数与 OSS Bucket 位于同地域,不支持跨地域配置。如需跨地域触发,可使用EventBridge 类别的 OSS 触发器或通过事件总线 EventBridge 路由事件。
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 触发器。
常见问题
相关文档
-
配置触发器
关于如何配置和使用原生 OSS 触发器和 EventBridge 类别的 OSS 触发器,请参见配置原生OSS触发器和配置EventBridge类别的OSS触发器。
-
触发器相关问题
-
如果需要查看函数的执行触发了哪个事件,可以在代码逻辑中打印事件类型日志,具体请参见日志记录。
-
如果需要在函数中调用另一个函数,可以使用 API 调用指定函数,具体请参见函数可以相互调用吗?。
-
-
触发器实践教程
-
如果需要解压上传到 OSS 的 ZIP 文件,请参见使用函数计算实现自动解压上传到OSS的ZIP文件。
-