COS 事件定义

该例子在 hello_world 函数中创建了一个 COS 触发器,当对象被上传到存储桶 cli-appid.cos.ap-beijing.myqcloud.com 时,该云函数会被触发。对应的 serverless.yml 如下所示:

  1. # serverless.yml
  2. functions:
  3. hello_world:
  4. handler: index.main_handler
  5. runtime: Nodejs8.9
  6. events:
  7. - cos:
  8. name: cli-appid.cos.ap-beijing.myqcloud.com
  9. parameters:
  10. bucket: cli-appid.cos.ap-beijing.myqcloud.com
  11. filter:
  12. prefix: filterdir/
  13. suffix: .jpg
  14. events: cos:ObjectCreated:*
  15. enable: true
  • 通过 COS 触发器中的 events 参数来指定具体的触发事件。在上述例子中,由于参数为 cos:ObjectCreated:*,所以函数会在对象被上传到存储桶的时候触发。

  • 通过规则过滤来指定具体的触发事件。在上述例子中,由于前缀为 filterdir/,后缀为 .jpg,因此仅当后缀为 .jpg 的文件被上传到 filterdir 文件时,函数才会被触发。

详情可以参考 COS 触发器概述

COS 触发器的事件消息结构

在指定的 COS Bucket 发生对象创建或对象删除事件时,会将类似以下的 JSON 格式事件数据发送给绑定的 SCF 函数。

  1. {
  2. "Records": [
  3. {
  4. "cos": {
  5. "cosSchemaVersion": "1.0",
  6. "cosObject": {
  7. "url": "http://testpic-1253970026.cos.ap-chengdu.myqcloud.com/testfile",
  8. "meta": {
  9. "x-cos-request-id": "NWMxOWY4MGFfMjViMjU4NjRfMTUyMV8yNzhhZjM=",
  10. "Content-Type": ""
  11. },
  12. "vid": "",
  13. "key": "/1253970026/testpic/testfile",
  14. "size": 1029
  15. },
  16. "cosBucket": {
  17. "region": "cd",
  18. "name": "testpic",
  19. "appid": "1253970026"
  20. },
  21. "cosNotificationId": "unkown"
  22. },
  23. "event": {
  24. "eventName": "cos:ObjectCreated:*",
  25. "eventVersion": "1.0",
  26. "eventTime": 1545205770,
  27. "eventSource": "qcs::cos",
  28. "requestParameters": {
  29. "requestSourceIP": "192.168.15.101",
  30. "requestHeaders": {
  31. "Authorization": "q-sign-algorithm=sha1&q-ak=AKIDQm6iUh2NJ6jL41tVUis9KpY5Rgv49zyC&q-sign-time=1545205709;1545215769&q-key-time=1545205709;1545215769&q-header-list=host;x-cos-storage-class&q-url-param-list=&q-signature=098ac7dfe9cf21116f946c4b4c29001c2b449b14"
  32. }
  33. },
  34. "eventQueue": "qcs:0:lambda:cd:appid/1253970026:default.printevent.$LATEST",
  35. "reservedInfo": "",
  36. "reqid": 179398952
  37. }
  38. }
  39. ]
  40. }