全部产品

配置触发器和事件格式

更新时间:2019-03-27 10:07:27

对于不同的触发器参数设定的配置文件的内容格式不同,本文列举了配置文件的格式样板,并说明了支持的属性。另外,由触发器触发的事件传递到函数接口的事件(event)对象的格式因触发器而异,本文同时列举并说明了不同格式的事件对象。

目前,我们支持以下两类触发器:

对于函数计算服务内创建的触发器,您可以使用 fcli 工具进入Shell模式,运行 mkt 命令创建触发器。其命令参数如下:

  1. >>> mkt --help
  2. --etag string trigger etag for update
  3. --help
  4. -r, --invocation-role string invocation role
  5. -s, --source-arn string event source arn
  6. -c, --trigger-config string trigger config file
  7. -t, --type string trigger type, support oss now (default "oss")

说明:不同触发器的 --trigger-config 参数的配置文件的内容格式是不同的。

HTTP触发器

HTTP触发器有别于其他触发器,函数签名是请求(request)和响应(response)对象,而不是事件(event)对象。所以HTTP触发器没有事件格式。

HTTP 触发器详细说明

配置触发器

触发器示例:httpTrigger.yml

  1. triggerConfig:
  2. authType: anonymous
  3. methods: ["GET", "POST"]

触发器参数说明

  • authType 为授权模式,取值范围:
    • anonymous:无需授权,允许任何人访问。
    • function:HTTP请求Header需要包含 签名 和时间戳。
  • methods 为请求方法,取值范围:
    • GET:HTTP GET方法
    • POST:HTTP POST方法
    • HEAD:HTTP HEAD方法
    • PUT:HTTP PUT方法
    • DELETE:HTTP DELETE方法

OSS触发器

OSS 事件触发器详细说明

配置触发器

触发器示例:ossTrigger.yml

  1. triggerConfig:
  2. events:
  3. - oss:ObjectCreated:PostObject
  4. - oss:ObjectCreated:PutObject
  5. filter:
  6. key:
  7. prefix: source/
  8. suffix: .png

触发器参数说明

  • events 为OSS端触发函数执行的事件,取值范围:
    • oss:ObjectCreated:*
    • oss:ObjectCreated:PutObject
    • oss:ObjectCreated:PutSymlink
    • oss:ObjectCreated:PostObject
    • oss:ObjectCreated:CopyObject
    • oss:ObjectCreated:InitiateMultipartUpload
    • oss:ObjectCreated:UploadPart
    • oss:ObjectCreated:UploadPartCopy
    • oss:ObjectCreated:CompleteMultipartUpload
    • oss:ObjectCreated:AppendObject
    • oss:ObjectRemoved:DeleteObject
    • oss:ObjectRemoved:DeleteObjects
    • oss:ObjectRemoved:AbortMultipartUpload
  • filter 为OSS对象过滤参数,满足过滤条件的OSS对象才可以触发函数,包含如下属性:
    • key:过滤器支持过滤对象键(Key),包含如下属性:
      • prefix:匹配前缀
      • suffix:匹配后缀

事件格式

  1. {
  2. "events": [
  3. {
  4. "eventName": "ObjectCreated:PutObject",
  5. "eventSource": "acs:oss",
  6. "eventTime": "2017-04-21T12:46:37.000Z",
  7. "eventVersion": "1.0",
  8. "oss": {
  9. "bucket": {
  10. "arn": "acs:oss:cn-shanghai:1237050315505689:bucketname",
  11. "name": "bucketname",
  12. "ownerIdentity": "1237050315505689",
  13. "virtualBucket": ""
  14. },
  15. "object": {
  16. "deltaSize": 122539,
  17. "eTag": "688A7BF4F233DC9C88A80BF985AB7329",
  18. "key": "image/a.jpg",
  19. "size": 122539
  20. },
  21. "ossSchemaVersion": "1.0",
  22. "ruleId": "9adac8e253828f4f7c0466d941fa3db81161e853"
  23. },
  24. "region": "cn-shanghai",
  25. "requestParameters": {
  26. "sourceIPAddress": "140.205.128.221"
  27. },
  28. "responseElements": {
  29. "requestId": "58F9FF2D3DF792092E12044C"
  30. },
  31. "userIdentity": {
  32. "principalId": "262561392693583141"
  33. }
  34. }
  35. ]
  36. }

Log Store触发器

日志服务触发器详细说明

配置触发器

触发器示例:slsTrigger.yml

  1. triggerConfig:
  2. sourceConfig:
  3. logstore: "etl-log"
  4. jobConfig:
  5. maxRetryTime: 3
  6. triggerInterval: 60
  7. functionParameter:
  8. a: "b"
  9. c: "d"
  10. logConfig:
  11. project: "ali-fc-test"
  12. logstore: "test-store"
  13. enable: true

触发器参数说明

  • sourceConfig 为数据源配置参数,包含如下属性:
    • logstore:日志服务日志库(Logstore)名称,亦即数据源。触发器会定时从该Logstore订阅数据到函数计算自定义加工。该参数创建后不允许修改。更多详情,请参见 操作Logstore
  • jobConfig 为任务配置参数,包含如下属性:
    • triggerInterval:日志服务触发函数运行的间隔。取值范围:[3, 600],单位:秒。例如,triggerInterval: 60 表示每60秒读取logstore的每个分区(Shard)最近60秒数据位置,并作为函数event调用函数执行,在函数内有用户逻辑读取Shard数据做计算。如果您的logstore Shard流量超过1 MB/s或者更高,建议缩短函数的触发间隔,使函数运行所处理的数据量合理大小。更多详情,请参见 操作Shard
    • maxRetryTime:单次触发允许的最大重试次数。取值范围:[0, 100]。日志服务根据触发间隔每次触发函数执行时,如果遇到错误时,例如权限不足、网络失败或者函数执行异常等,如果超过最大重试次数仍无法成功的,需要等到下一次触发间隔到来时,由日志服务再次触发函数执行。重试对业务造成的影响,因具体的函数代码实现逻辑而异。
  • functionParameter:日志服务将该配置内容作为函数event一部分传入函数,如何使用该函数由函数自定义逻辑决定。每一种函数实现所要求的函数配置可能是不同的,绝大部分默认提供的函数模板也需要参考说明填写您的参数。默认值为空({})。
  • logConfig 为触发器的日志文件配置,包含如下属性:
    • project:日志服务项目(Project)名称。更多详情,请参阅 操作Project
    • logstore:存放日志的Logstore名称。
  • enable为是否启用触发器。取值范围:true|false。

事件格式

  1. {
  2. "parameter":{
  3. "a":"b",
  4. "c":"d"
  5. },
  6. "source":{
  7. "endpoint":"http://cn-shanghai-intranet.log.aliyuncs.com",
  8. "projectName":"vangie-fc-test",
  9. "logstoreName":"fc-test",
  10. "shardId":0,
  11. "beginCursor":"MTUyMzI2NzI5NDY1NjI4MzgzNg==",
  12. "endCursor":"MTUyMzI2NzI5NDY1NjI4MzgzNw=="
  13. },
  14. "jobName":"05c79f637c6b46eaa85911cae032cf47551af7bb",
  15. "taskId":"d22697c0-2a41-4d35-b27c-dccec8856768",
  16. "cursorTime":1523323454
  17. }

Timer触发器

配置触发器

定时触发器详细说明

触发器示例:timerTrigger.yml

  1. triggerConfig:
  2. payload: "aaaaa"
  3. cronExpression: "0 1/1000 * * * *"
  4. enable: true

触发器参数说明

  • payload 为触发消息,支持任意格式文本,每次触发会作为参数传递给函数。
  • cronExpression 为一个Cron表达式。更多详情,请参见 Cron 表达式取值说明
  • enable 为是否启用触发器。取值范围:true|false。

事件格式

  1. {
  2. "triggerTime":"2018-04-10T01:31:00Z",
  3. "triggerName":"t1",
  4. "payload":"abcde"
  5. }

CDN事件触发器

CDN事件触发器详细说明

配置触发器

触发器示例:cdn_events_trigger.yml

  1. triggerConfig:
  2. eventName: LogFileCreated
  3. eventVersion: 1.0.0
  4. notes: cdn events trigger test
  5. filter:
  6. domain: {“www.taobao.com”,”www.tmall.com”}

触发器参数说明

  • eventName 为CDN端触发函数执行的事件
  • eventVersion为CDN端触发函数执行事件的版本
  • notes备注
  • filter 过滤器

目前支持的eventName, eventVersion个filter key取值:

Event Name Event Version Filter Key Description
CachedObjectsRefreshed 1.0.0 domain CDN刷新资源
CachedObjectsBlocked 1.0.0 domain CDN封禁资源
CachedObjectsPushed 1.0.0 domain CDN预热资源
LogFileCreated 1.0.0 domain 离线日志文件生成

filter需要至少包含一组<过滤参数,过滤参数值>,格式如下:

  1. filter:
  2. 过滤参数1: {过滤参数值a,过滤参数值b}
  3. 过滤参数2: {过滤参数值c,过滤参数值d}

事件格式

CachedObjectsRefreshed,CachedObjectsPushed和CachedObjectsBlocked事件格式:

  1. {
  2. "events": [
  3. {
  4. "eventName": "CachedObjectsRefreshed",//事件类型
  5. "eventVersion": "1.0.0", // 事件版本,目前都是1.0.0版本
  6. "eventSource": "cdn", // 事件源名称
  7. "region": "cn-hangzhou", // 区域,默认为"cn-hangzhou"
  8. "eventTime": "2018-03-16T14:19:55+08:00",//事件发生时间
  9. "traceId": "cf89e5a8-7d59-4bb5-a33e-4c3d08e25acf",//事件源传递过来的id, 用于排查问题
  10. "resource": {
  11. "domain": "example.com"//资源所在的域名
  12. },
  13. "eventParameter": {
  14. "objectPath": [
  15. "/2018/03/16/13/33b430c57e7.mp4",//资源标识
  16. "/2018/03/16/14/4ff6b9bd54d.mp4"//资源标识
  17. ],
  18. "createTime": 1521180769,//刷新开始时间
  19. "domain": "example.com",//资源所在的域名
  20. "completeTime": 1521180777,//刷新结束时间
  21. "objectType": "File", //刷新类型,取值为FileDirectory
  22. "taskId": 2089687230 //资源刷新任务ID
  23. },
  24. "userIdentity": {
  25. "aliUid": "1xxxxxxxxxx" //用户ID
  26. }
  27. }
  28. ]
  29. }

LogFileCreated事件格式:

  1. {
  2. "events": [
  3. {
  4. "eventName": "LogFileCreated",//事件类型
  5. "eventSource": "cdn",//事件源名称
  6. "region": "cn-hangzhou",//区域,默认为cn-hangzhou
  7. "eventVersion": "1.0.0",//事件版本
  8. "eventTime": "2018-06-14T15:31:49+08:00",//事件发生时间
  9. "userIdentity": {
  10. "aliUid": "1xxxxxxxxxxxx" //用户ID
  11. },
  12. "resource": {
  13. "domain": "example.com"//域名
  14. },
  15. "eventParameter": {
  16. "domain": "example.com",//域名
  17. "endTime": 1528959900,//日志文件的结束时间
  18. "fileSize": 1788115,//日志文件大小
  19. "filePath": "http://cdnlog.cn-hangzhou.oss.aliyun-inc.com/www.aliyun.com/2017_12_27/www.aliyun.com_2017_12_27_0800_0900.gz?OSSAccessKeyId=xxxx&Expires=xxxx&Signature=xxxx",//日志文件地址
  20. "startTime": 1528959600//日志文件的起始时间
  21. },
  22. "traceId": "c6459282-6a4d-4413-894c-e4ea39686738" //事件源传递过来的id, 用于排查问题
  23. }
  24. ]
  25. }

详细示例请见 CDN事件触发器

MNS 主题触发器

配置触发器

MNS 主题发器详细说明

触发器示例:mnsTrigger.yml

  1. triggerConfig:
  2. notifyContentFormat: STREAM
  3. notifyStrategy: BACKOFF_RETRY
  4. filterTag: testTag

触发器参数说明触发器参数说明

参数名称 约束 默认值 类型 描述
notifyContentFormat STREAM, JSON STREAM string Optional, 推送给函数入参event的格式
notifyStrategy BACKOFF_RETRY, EXPONENTIAL_DECAY_RETRY BACKOFF_RETRY string Optional, 详情参考 NotifyStrategy
filterTag 不超过16个字符的字符串 string Optional, 描述了该订阅中消息过滤的标签(标签一致的消息才会被推送), 如果不限制消息推送给函数,则不需要不设置tag

事件格式

详情见 MNS 主题触发器入口event示例

RDS 触发器

配置触发器

RDS触发器详细说明

触发器示例:rdsTrigger.yml

  1. triggerConfig:
  2. subscriptionObjects: ["db1.table1", "db1.table2"]
  3. retry: 1
  4. concurrency: 2
  5. eventFormat: json

触发器参数说明

参数名称 约束 默认值 类型 描述
subscriptionObjects string 订阅对象,当前支持到表级别,只有这些表的更新才会触发函数执行, 比如参数为[“db1.table1”, “db2.table2”]
retry [0,3] 3 int 失败重试次数,如果重试指定次数后还是失败,则跳过失败event,继续后续调用
concurrency [1,5] 1 int 调用并发量,如果用户关心事件顺序,一定要置为1,会按照事务在binlog中commit的顺序调用函数。如果不关心事件顺序,则可以调大并发,提高性能
eventFormat json,protobuf protobuf string event格式

事件格式

详情见 RDS 触发器入口event示例

Table Store触发器

Table Store触发器详细说明

事件格式

表格存储(Table Store)触发器采用 CBOR格式 编码增量数据,以构成函数计算的事件。增量数据的事件格式如下所示:

  1. {
  2. "Version": "string",
  3. "Records": [
  4. {
  5. "Type": "string",
  6. "Info": {
  7. "Timestamp": int64
  8. },
  9. "PrimaryKey": [
  10. {
  11. "ColumnName": "string",
  12. "Value": formated_value
  13. }
  14. ],
  15. "Columns": [
  16. {
  17. "Type": "string",
  18. "ColumnName": "string",
  19. "Value": formated_value,
  20. "Timestamp": int64
  21. }
  22. ]
  23. }
  24. ]
  25. }

参数说明

  • Version 为 payload 版本号,取值:Sync-v1。
  • Records 为数据表中的增量数据行信息集合,包含如下属性:
    • Type:数据行类型,包含PutRow、UpdateRow和DeleteRow。
    • Info:数据行基本信息,包含如下属性:
      • Timestamp:该行的最后修改时间,采用UTC时间。
      • PrimaryKey:主键列数组,包含如下属性:
        • ColumnName:主键列名称。
        • Value:主键列内容,支持integer、string和blob。
      • Colunms:列属性数组,包含如下属性:
        • Type:列属性,包含Put、DeleteOneVersion和DeleteAllVersions。
        • ColumnName:列名称。
        • Value:列值,支持integer、boolean、double、string和blob。
        • Timestamp:列最后修改时间,采用UTC时间。

事件示例

  1. {
  2. "Version": "Sync-v1",
  3. "Records": [
  4. {
  5. "Type": "PutRow",
  6. "Info": {
  7. "Timestamp": 1506416585740836
  8. },
  9. "PrimaryKey": [
  10. {
  11. "ColumnName": "pk_0",
  12. "Value": 1506416585881590900
  13. },
  14. {
  15. "ColumnName": "pk_1",
  16. "Value": "2017-09-26 17:03:05.8815909 +0800 CST"
  17. },
  18. {
  19. "ColumnName": "pk_2",
  20. "Value": 1506416585741000
  21. }
  22. ],
  23. "Columns": [
  24. {
  25. "Type": "Put",
  26. "ColumnName": "attr_0",
  27. "Value": "hello_table_store",
  28. "Timestamp": 1506416585741
  29. },
  30. {
  31. "Type": "Put",
  32. "ColumnName": "attr_1",
  33. "Value": 1506416585881590900,
  34. "Timestamp": 1506416585741
  35. }
  36. ]
  37. }
  38. ]
  39. }

API网关触发器

API网关触发器详细说明

事件格式

输入格式

当以函数计算作为API网关的后端服务时,API网关会把请求参数通过一个固定的Mapping结构传给函数计算的请求参数 event,函数计算通过如下结构去获取和处理需要的参数。请求参数Mapping结构如下所示:

  1. {
  2. "path":"api request path",
  3. "httpMethod":"request method name",
  4. "headers":{all headers,including system headers},
  5. "queryParameters":{query parameters},
  6. "pathParameters":{path parameters},
  7. "body":"string of request payload",
  8. "isBase64Encoded":"true|false, indicate if the body is Base64-encode"
  9. }

参数说明

  • isBase64Encoded=true 表示API网关传给函数计算的 body 内容经过Base64编码。此时,函数计算会先Base64解码 body 内容。
  • isBase64Encoded=false 表示API网关传给函数计算的 body 内容没有经过Base64编码。

事件示例

  1. {
  2. "body":"",
  3. "headers":{
  4. "X-Ca-Api-Gateway":"BDB46B3A-71A7-447B-B20B-28C594426407",
  5. "X-Forwarded-For":"106.11.231.99"
  6. },
  7. "httpMethod":"GET",
  8. "isBase64Encoded":false,
  9. "path":"/fc",
  10. "pathParameters":{
  11. },
  12. "queryParameters":{
  13. }
  14. }

输出格式

为方便API网关解析输出内容,函数计算会将输出内容通过规范化,以如下JSON格式返回给API网关服务:

  1. {
  2. "isBase64Encoded":true|false,
  3. "statusCode":httpStatusCode,
  4. "headers":{response headers},
  5. "body":"..."
  6. }

参数说明

  • body 内容为二进制时,需在函数计算中先Base64编码 body 内容,同时设置 isBase64Encoded=true。API 网关服务会对 isBase64Encoded=true 的 body 内容进行 Base64 解码后再传递给客户端。
  • 如果 body 无需 Base64 编码时,isBase64Encoded 可以设置为 false
  • 在 Node.js 版本函数计算中,需要根据不同的情况设置 callback
    • 返回成功请求时:callback{null,{“statusCode”:200,”body”:”…”}}
    • 返回异常请求时:callback{new Error(‘internal server error’),null}
    • 返回客户端错误时:callback{null,{“statusCode”:400,”body”:”param error”}}
  • 如果返回结果不符合格式要求,API网关服务报错503 Service Unavailable。

Datahub 触发器

Datahub 触发器详细说明

事件格式

  1. {
  2. "eventSource": "acs:datahub",
  3. "eventName": "acs:datahub:putRecord",
  4. "eventSourceARN": "/projects/test_project_name/topics/test_topic_name",
  5. "region": "cn-hangzhou",
  6. "records": [
  7. {
  8. "eventId": "0:12345",
  9. "systemTime": 1463000123000,
  10. "data": "[\"col1's value\",\"col2's value\"]"
  11. },
  12. {
  13. "eventId": "0:12346",
  14. "systemTime": 1463000156000,
  15. "data": "[\"col1's value\",\"col2's value\"]"
  16. }
  17. ]
  18. }

参数说明

  • eventSource 为事件来源,取值:acs:datahub
  • eventName 为事件名称,取值:acs:datahub:putRecord
  • eventSourceARN 为事件来源标识,包含 DataHub 的 Project 和 Topic 名称,如 /projects/test_project_name/topics/test_topic_name。
  • region 为事件来源DataHub所属的地域,如 cn-hangzhou。更多详情,请参阅 地域与可用区
  • records 为事件包含的记录列表,包含以下键值:
    • eventId:记录 ID,组成方式为 shardId:SequenceNumber。
    • systemTime:该事件存入DataHub的时间戳。
    • data:事件的数据内容。元祖(Tuple)类型的 Topic 该字段数据类型为列表(List),其中每个列表元素均为字符(String)类型的数据对应每个 topic 中每个字段的值。二进制大对象(Blob)类型Topic该字段数据类型为String。

IoT 触发器

IoT 触发器详细说明

事件格式

IoT hub传入函数计算的事件(event)内容是没有封装的IoT hub消息内容。例如,您可以通过如下Java示例向IoT Topic推送消息:

  1. PubRequest request = new PubRequest();
  2. request.setProductKey("VHo5FRjudkZ");
  3. request.setMessageContent(Base64.getEncoder().encodeToString("{\"hello\":\"world\"}".getBytes()));
  4. request.setTopicFullName("/VHo5FRjudkZ/deviceName/update");
  5. request.setQos(0);
  6. PubResponse response = client.getAcsResponse(request);
  7. System.out.println(response.getSuccess());
  8. System.out.println(response.getErrorMessage());

在函数计算函数内部收到的事件为:

  1. {
  2. "hello": "world"
  3. }

相关链接