OSS触发器概述

更新时间: 2023-12-19 15:51:29

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

背景信息

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

OSS和函数计算集成后,您可以自由地调用各种函数处理图像或音频数据,再把结果写回到多种存储服务中。整个架构中,您只需要专注于函数逻辑的编写,系统将以实时的、可靠的、大规模并行的方式处理海量的数据。

OSS触发器使用限制

  • 原生OSS触发器支持查询Bucket侧关联的所有触发器。

    您可以根据业务情况,重复使用已有的OSS触发器或删除不再使用的OSS触发器,避免Bucket侧关联的触发器超过10个。您可以在函数详情页面的触发器管理页签,单击目标触发器配置信息列的Bucket名称,在OSS Bucket 关联的全部 OSS 触发器面板查看关联的所有OSS触发器。

    created-oss-trigger

    说明

    删除触发器的操作不可逆,请谨慎操作。

  • EventBridge类别的OSS触发器支持配置多个文件前缀和文件后缀。

  • 原生OSS触发器EventBridge类别的OSS触发器配置的文件前缀和文件后缀都不支持正则匹配。

  • EventBridge类别的OSS触发器支持在一个Bucket内关联超过10个以上的OSS触发器。

    一般情况下,不推荐一个Bucket下关联10个以上的触发器,建议您创建新的Bucket,并基于新的Bucket创建触发器。

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(成都)。

OSS触发器触发规则

避免循环触发

警告

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

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

原生OSS触发器触发规则:保证语义唯一性

一个Bucket下创建的触发器必须保证语义唯一性,即触发事件、文件前缀和文件后缀组成的语义唯一。例如,您已为某Bucket创建了触发事件为oss:ObjectCreated:PutObject的触发器,该触发器的文件前缀和文件后缀分别为sourcezip,那么为该Bucket新创建的触发器是否合法的说明如下表所示。

触发事件

文件前缀

文件后缀

是否合法

解释说明

oss:ObjectCreated:*

source1

zip1

新创建的触发器和已创建的触发器的事件重合。

说明

OSS的事件oss:ObjectCreated:*是所有ObjectCreated类型事件的全集。如果某Bucket下已经创建了任意一个ObjectCreated类型事件的触发器,将无法创建oss:ObjectCreated:*事件的触发器。同理,如果某Bucket下已经创建了oss:ObjectCreated:*事件的触发器,将无法创建任何ObjectCreated类型事件的触发器。

oss:ObjectCreated:PutObject

source

zip

新创建的触发器和已创建的触发器的文件前后缀均重合。

source

新创建的触发器和已创建的触发器的文件前缀重合,文件后缀不设置则包含了后缀为zip的对象。

zip

新创建的触发器和已创建的触发器的文件后缀重合,文件前缀不设置则包含了前缀为source的对象。

source1

zip1

新创建的触发器和已创建的触发器的文件前后缀均不重合。

source

zip1

新创建的触发器和已创建的触发器的文件后缀不重合。

source1

zip

新创建的触发器和已创建的触发器的文件前缀不重合。

oss:ObjectCreated:PostObject

source

zip

新创建的触发器和已创建的触发器的事件不同。

重要

原生OSS触发器要保证语义唯一性,所以不支持为不同的函数配置相同的OSS触发器。

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

常见问题

相关文档

阿里云首页 函数计算(旧版) 相关技术圈