函数计算的正确使用姿势——OSS 触发器

前言

首先介绍下在本文出现的几个比较重要的概念:

函数计算(Function Compute): 函数计算是一个事件驱动只需编写代码并上传。函数计算准备计算资源,以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息 参考

Fun: 是一个用于支持 Serverless 部署工具,能帮助您便捷地管理函数计算、API 网关、日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建、部署操作。Fun 的更多文档 参考

通过本文的示例,你将了解:Fun 如何使用 OSS 触发器连接 OSS 和函数计算。

事件源服务

函数计算的正确使用姿势——OSS 触发器

事件源服务是可以触发函数服务集合,例如对象存储 OSS,日志服务,API 网关,定时器(Timer)和 HTTP 请求等。事件发生时,承载触发器的事件源服务决定是否运行您的函数。例如,当您创建一个 OSS PutObject 触发器后,上传对象到指定的 OSS Bucket 就是一次事件,继而触发对应函数,这个过程中 OSS 就是事件源服务。函数计算具有丰富的事件源来实现您的各种自定义化的需求。如需了解更多,请参照链接

Fun 配置并部署 OSS 触发器

函数计算触发器描述了一组规则,当某个事件满足这些规则,事件源就会触发相应的函数。阿里云对象存储和函数计算无缝集成。您可以为各种类型的事件设置处理函数,当OSS系统捕获到指定类型的事件后,会自动调用函数处理
Fun 通过一个资源配置文件(template.yml),协助您进行开发、构建、部署。所以我们在 yml 中按照规范去描述 OSS 触发器:

Events:
  oss-trigger-name:
    Type: OSS # trigger type
    Properties:
      BucketName: coco-superme # oss bucket name
      Events:
        - oss:ObjectCreated:*
        - oss:ObjectRemoved:DeleteObject        
      Filter: 
        Key:
          Prefix: source/
          Suffix: .png
  • oss-trigger-name:为用户自定义的 触发器(trigger)名称,名称不允许重复.
  • Type:为事件源集合中的一种,表示事件源类型。Fun 支持的类型请参阅。本 yml 为 OSS。
  • BucketName: oss bucket name,创建 OSS bucket,参考
  • Events:为 OSS 事件类型。
  • Filter:filter为 OSS 对象过滤参数,满足过滤条件的 OSS 对象才可以触发函数,包含如下属性:

    • Key:过滤器支持过滤对象键(Key),包含如下属性:

      • Prefix:匹配前缀
      • Suffix:匹配后缀

一个被存入OSS的文件,如果它是以 source/ 为前缀,并且后缀是 .png 的文件,并且由用户自定义的事件(evens)触发后,OSS 就会自动的调用相应的函数进行处理。示例完整代码

执行 fun deploy,即可创建、配置并部署好相关服务:

using region: cn-shanghai
using accountId: ***********8320
using accessKeyId: ***********mTN4
using timeout: 10

Waiting for service oss-test-service to be deployed...
        Waiting for function oss-test-function to be deployed...
                Waiting for packaging function oss-test-function code...
                package function oss-test-function code done
                Waiting for OSS trigger oss-trigger-name to be deployed...
                function oss-trigger-name deploy success
        function oss-test-function deploy success
service oss-test-service deploy success

PS D:\fun\examples\oss-trigger>

然后我们去函数计算控制台查看我们刚刚定义的 OSS 触发器:

函数计算的正确使用姿势——OSS 触发器

可见,名为 oss-trigger-name 的 OSS 触发器已经创建成功,是不是既简单又方便。

注意事项

配置混淆

当我们部署时,出现如下日志:

函数计算的正确使用姿势——OSS 触发器

说明在 fc 控制台中配置的触发器 oss 触发器名称与本地配置不匹配。即:FC 控制台配置的触发器集合不在本地配置的触发器之内。fun 不会修改这个触发器。你可以通过控制台删除这个必要时通过 FC 控制台手动触发

循环触发

使用 OSS 触发器一定要避免 循环触发。一个典型的循环触发场景是 OSS 的某个 Bucket 上传文件触发函数执行,这个函数又生成了一个或多个文件,又写回到 OSS 的 Bucket 里,这个写入动作又触发了函数执行,形成了链状循环
上述过程类似于一个无限递归,为了避免这种循环触发函数产生不必要的费用,强烈建议您配置前/后缀,例如将触发函数的 Bucket 目录前缀设置成 src/,生成的文件写入的目录前缀设置为 dst/,这样生成的文件就不会再次触发函数。

总结

  • 在 yml 文件定义 OSS 触发器,所有属性为必填。
  • 当 OSS 系统捕获到相关事件后,会将事件信息编码为 JSON 字符串,传递给事件处理函数,您可以在代码中获取事件信息。此处相关本文不做赘述,感兴趣的同学可以查看相关文档
  • 只要配置无误,您只需要专注于函数逻辑的编写,系统将以实时的、可靠的、大规模并行的方式处理海量的数据
上一篇:最好的视频格式转换器:Wondershare UniConverter Mac中文注册版


下一篇:关系数据库设计中,用中间表好还是直接设定主外键关联好?