更新时间:2026-01-07 GMT+08:00

函数支持的事件源

本节列出了FunctionGraph函数支持的云服务,可以将这些服务配置为FunctionGraph函数的事件源。在预配置事件源映射后,这些事件源检测事件时将自动调用FunctionGraph函数。

消息通知服务SMN

可以编写FunctionGraph函数来处理SMN的通知,在将消息发布到SMN主题时,服务可以通过将消息负载作为参数传递(SMN示例事件)来调用FunctionGraph函数,FunctionGraph函数代码可以处理事件,比如将消息发布到其他SMN主题或将消息发送到其他云服务。SMN消息触发的使用过程请参考《用户指南》的“使用SMN触发器”章节。

API Gateway

可以通过HTTPS调用FunctionGraph函数,使用API Gateway自定义REST API和终端节点来实现。可以将各个API操作(如GET和PUT)映射到特定的FunctionGraph函数,当向该API终端节点发送HTTPS请求时(APIG示例事件),API Gateway会调用相应的FunctionGraph函数。HTTPS调用触发函数的使用过程请参考《用户指南》的“使用APIG触发器”章节。

对象存储服务OBS

可以编写FunctionGraph函数来处理OBS存储桶事件,例如对象创建事件或对象删除事件。当用户将一张照片上传到存储桶时,OBS存储桶调用FunctionGraph函数,实现读取图像和创建照片缩略图。OBS对象操作触发函数的过程请参考《用户指南》的“使用OBS触发器”章节。

表1 OBS支持事件类型

事件

说明

ObjectCreated

表示所有创建对象的操作,包含Put、Post、Copy对象以及合并段。

Put

使用Put方法上传对象。

Post

使用Post方法上传对象。

Copy

使用copy方法复制对象。

CompleteMultipartUpload

表示合并分段任务。

ObjectRemoved

表示删除对象。

Delete

指定对象版本号删除对象。

DeleteMarkerCreated

不指定对象版本号删除对象。

多个事件类型可以作用于同一个目标对象,例如:同时选择“事件类型”复选框中的Put、Copy、Delete等方法作用于某目标对象,则用户往该桶中上传、复制、删除符合前后缀规则的目标对象时,均会发送事件通知给用户。ObjectCreated包含了Put、Post、Copy和CompleteMultipartUpload,如果选择了ObjectCreated,则不能再选择Put、Post、Copy或CompleteMultipartUpload。同理如果选择了ObjectRemoved,则不能再选择Delete或DeleteMarkerCreated。

定时触发器TIMER

可以使用TIMER的计划事件功能定期调用您的代码,可以指定固定频率(分钟、小时、天数)或指定 cron 表达式定期调用函数(TIMER示例事件)。定时触发器的使用请参考《用户指南》的“使用定时触发器”章节。

日志触发器LTS

可以编写FunctionGraph函数来处理云日志服务订阅的日志,当云日志服务采集到订阅的日志后,可以通过将采集到的日志作为参数传递(LTS示例事件)来调用FunctionGraph函数,FunctionGraph函数代码可以对其进行自定义处理、分析或将其加载到其他系统。LTS日志触发的使用过程请参考《用户指南》的“使用LTS触发器”章节。

云审计服务触发器CTS

可以编写FunctionGraph函数,根据CTS云审计服务类型和操作订阅所需要的事件通知,当CTS云审计服务获取已订阅的操作记录后,通过CTS触发器将采集到的操作记录作为参数传递(CTS示例事件)来调用FunctionGraph函数。经由函数对日志中的关键信息进行分析和处理,对系统、网络等业务模块进行自动修复,或通过短信、邮件等形式产生告警,通知业务人员进行处理。CTS触发器的使用请参考《用户指南》的“使用CTS触发器”章节。

分布式消息服务Kafka

使用Kafka触发器,当向Kafka实例的Topic生产消息时,FunctionGraph会消费消息,触发函数以执行额外的工作,关于Kafka触发器的使用请参见《用户指南》的“使用Kafka触发器”章节。

云监控服务

FunctionGraph函数实现了与云监控服务对接,函数上报云监控服务的监控指标,用户可以通过云监控服务来查看函数产生的监控指标和告警信息。查看监控指标请参考《用户指南》的“查看监控图表”章节。

分布式消息服务RabbitMQ版

使用RabbitMQ触发器,FunctionGraph会定期轮询RabbitMQ实例指定Exchange绑定的队列下的新消息,FunctionGraph将轮询得到的消息作为参数传递来调用函数。

示例事件

  • SMN示例事件

    示例函数名为test,smn主题为serverless_Test,对应的SMN事件内容如下(消息头为"subject"字段,消息体为"message"字段):

    {
        "record": [{
            "event_version": "1.0",
            "smn": {
                "message_attributes": null,
                "subject": "This is the message title of smn trigger",
                "message_id": "a5dbd701d70d4ac2a153e7dd6dd9b601",
                "topic_urn": "urn:smn:xx-xxxxx-x:bb8695913bb74682b9ca82a8803b60d8:serverless_Test",
                "type": "notification",
                "message": "This is the message body of smn trigger",
                "timestamp": "2017-11-15T04:02:24Z"
                },
            "event_source": "smn",
            "event_subscription_urn": "urn:fss:xx-xxxxx-xxx:bb8695913bb74682b9ca82a8803b60d8:function:default:obsTrigger-Test1:latest"
        }],
        "functionname": "test",
        "requestId": "7c307f6a-cf68-4e65-8be0-4c77405a1b2c",
        "timestamp": "Wed Nov 15 2017 12:00:00 GMT+0800 (CST)"
    }

  • APIG示例事件

    通过APIG服务调用函数服务时,请求体body默认加密。

    {
        "httpMethod": "GET",     //请求方法
        "path": "/test/hello",   //请求路径
        "pathParameters": {      //路径参数
            "proxy": "hello"
        },
        "queryStringParameters": { //查询参数
            "name": "me"
        },
        "headers": {               //请求头
            "x-stage": "RELEASE",
            "Host": "3f96e175-d5e4-4d4b-ae7e-f6d264e63b23-apigw.xx-xxx-x.xxx.com",
            "User-Agent": "lua-resty-http/0.10 (Lua) ngx_lua/10008",
            ……
        },
        "body": "……",              //请求体
        "isBase64Encoded":false/true,  //body是否base64
        "requestContext": {
            "stage": "test",          //环境别名
            "requestId": "dd4337362c02c7d77299e78781beb4b1",
            "apiId": "41b45ea3-70b5-11e6-b7bd-69b5aaebc7d9"
        },
    }

    函数应按以下结构返回字符串。

    {
        "isBase64Encoded": true|false,
        "statusCode": httpStatusCode,
        "headers": {"headerName":"headerValue",...},
        "body": "..."
    }
  • DIS示例事件

    示例数据流名称为dis-swtest,那么利用该数据流创建触发器的函数收到的请求格式为(消息在Message中)。

    {
        "ShardID": "shardId-0000000000",
        "Message": {
            "next_partition_cursor": "eyJnZXRJdGVyYXRvclBhcmFtIjp7InN0cmVhbS1uYW1lIjoiZGlzLXN3dGVzdCIsInBhcnRpdGlvbi1pZCI6InNoYXJkSWQtMDAwMDAwMDAwMCIsImN1cnNvci10eXBlIjoiVFJJTV9IT1JJWk9OIiwic3RhcnRpbmctc2VxdWVuY2UtbnVtYmVyIjoiNCJ9LCJnZW5lcmF0ZVRpbWVzdGFtcCI6MTUwOTYwNjM5MjE5MX0",
            "records": [{
                "partition_key": "shardId_0000000000",
                "data": "PEJ1ZmZlcj48L0J1ZmZlcj4=",
                "sequence_number": "0"
            },
            {
                "partition_key": "shardId_0000000000",
                "data": "PEJ1ZmZlcj48L0J1ZmZlcj4=",
                "sequence_number": "1"
            },
            {
                "partition_key": "shardId_0000000000",
                "data": "PEJ1ZmZlcj48L0J1ZmZlcj4=",
                "sequence_number": "2"
            },
            {
                "partition_key": "shardId_0000000000",
                "data": "PEJ1ZmZlcj48L0J1ZmZlcj4=",
                "sequence_number": "3"
            }],
            "millis_behind_latest": ""
        },
        "Tag": "latest",
        "StreamName": "dis-swtest"
    }
  • TIMER示例事件
    {
      "version": "v1.0",
      "time": "2006-01-02T15:04:05-07:00",  // 本地时间
      "trigger_type": "TIMER",   // 触发器类型
      "trigger_name": "触发器名称",
      "user_event": "用户配置事件"   //该字段内容为用户在创建定时触发器时配置的用户事件
    }
  • LTS示例事件
    {
        "lts": {
        "data": "eyJsb2dzIjpbIntcIm1lc3NhZ2VcIjpcIjIwMTgtMDYtMjYvMTg6NDA6NTMgW0lORl0gW2NvbmZpZy5nbzo3Ml0gU3VjY2Vzc2Z1bGx5IGxvYWRlZCBnZW5lcmFsIGNvbmZpZ3VyYXRpb24gZmlsZVxcclxcblwiLFwidGltZVwiOjE1MzAwMDk2NTMwNTksXCJob3N0X25hbWVcIjpcImVjcy10ZXN0YWdlbnQubm92YWxvY2FsXCIsXCJpcFwiOlwiMTkyLjE2OC4xLjk4XCIsXCJwYXRoXCI6XCIvdXNyL2xvY2FsL3RlbGVzY29wZS9sb2cvY29tbW9uLmxvZ1wiLFwibG9nX3VpZFwiOlwiNjYzZDY5MzAtNzkyZC0xMWU4LThiMDgtMjg2ZWQ0ODhjZTcwXCIsXCJsaW5lX25vXCI6NjE1fSIsIntcIm1lc3NhZ2VcIjpcIjIwMTgtMDYtMjYvMTg6NDA6NTMgW1dSTl0gW2NvbmZpZy5nbzo4Ml0gVGhlIHByb2plY3RJZCBvciBpbnN0YW5jZUlkIG9mIGNvbmZpZy5qc29uIGlzIG5vdCBjb25zaXN0ZW50IHdpdGggbWV0YWRhdGEsIHVzZSBtZXRhZGF0YS5cXG5cIixcInRpbWVcIjoxNTMwMDA5NjUzMDU5LFwiaG9zdF9uYW1lXCI6XCJlY3MtdGVzdGFnZW50Lm5vdmFsb2NhbFwiLFwiaXBcIjpcIjE5Mi4xNjguMS45OFwiLFwicGF0aFwiOlwiL3Vzci9sb2NhbC90ZWxlc2NvcGUvbG9nL2NvbW1vbi5sb2dcIixcImxvZ191aWRcIjpcIjY2M2Q2OTMwLTc5MmQtMTFlOC04YjA5LTI4NmVkNDg4Y2U3MFwiLFwibGluZV9ub1wiOjYxNn0iLCJ7XCJtZXNzYWdlXCI6XCIgSW4gY29uZi5qc29uLCBwcm9qZWN0SWQgaXMgW10sIGluc3RhbmNlSWQgaXMgW10uIE1ldGFEYXRhIGlzIHs0NTQzMjkzYS01YjJjLTQ0YzQtYjdhMC1kZTIxOGY3ZjJmYTYgNjI4MGUxNzBiZDkzNGY2MGE0ZDg1MWNmNWNhMDUxMjkgIH1cXHJcXG5cIixcInRpbWVcIjoxNTMwMDA5NjUzMDU5LFwiaG9zdF9uYW1lXCI6XCJlY3MtdGVzdGFnZW50Lm5vdmFsb2NhbFwiLFwiaXBcIjpcIjE5Mi4xNjguMS45OFwiLFwicGF0aFwiOlwiL3Vzci9sb2NhbC90ZWxlc2NvcGUvbG9nL2NvbW1vbi5sb2dcIixcImxvZ191aWRcIjpcIjY2M2Q2OTMwLTc5MmQtMTFlOC04YjBhLTI4NmVkNDg4Y2U3MFwiLFwibGluZV9ub1wiOjYxN30iXSwib3duZXIiOiI2MjgwZTE3MGJkOTM0ZjYwYTRkODUxY2Y1Y2EwNTEyOSIsImxvZ19ncm91cF9pZCI6Ijk3YTlkMjg0LTQ0NDgtMTFlOC04ZmE0LTI4NmVkNDg4Y2U3MCIsImxvZ190b3BpY19pZCI6IjFhOTY3NWE3LTc4NGQtMTFlOC05ZjcwLTI4NmVkNDg4Y2U3MCJ9"
        }
    }
  • CTS示例事件
    {
    	"cts": {
    		"time": "2018/06/26 08:54:07 GMT+08:00", //timestamp, 发送方产生
    		"user": { // 本次请求发起用户信息
    			"name": "userName",
    			"id": "5b726c4fbfd84821ba866bafaaf56aax",
    			"domain": {
    				"name": "domainName",
    				"id": "b2b3853af40448fcb9e40dxj89505ba"
    			}
    		},
    		"request": {}, //事件请求内容
    		"response": {}, //事件响应内容
    		"code": 204, //事件响应码 例如200,400
    		"service_type": "FunctionGraph", //发送方的简写,比如VPC,ECS等等
    		"resource_type": "graph", //发送方资源类型,比如vm,vpn等等
    		"resource_name": "workflow-2be1", //资源名称,例如ecs服务中某个虚拟机的名称
    		"resource_id": "urn:fgs:xx-xxx-x:2d1d891d93054bbaa69b9e866c0971ac:graph:workflow-2be1", //源id,例如ecs服务中某个虚拟机的id
    		"trace_name": "deleteGraph", //事件名称比如:startServer, shutDown等
    		"trace_type": "ConsoleAction", //事件发生源头类型例如ApiCall
    		"record_time": "2018/06/26 08:54:07 GMT+08:00", //cts服务接受到这条trace的时间
    		"trace_id": "69be64a7-0233-11e8-82e4-e5d37911193e", //当前trace唯一标示
    		"trace_status": "normal"
    	}
    }
  • Kafka示例事件
    {
        "event_version": "v1.0",
        "event_time": 1576737962,
        "trigger_type": "KAFKA",
        "region": "xx-xxxx-x",
        "messages": [
            "kafka message1",
            "kafka message2",
            "kafka message3",
            "kafka message4",
            "kafka message5"
        ],
        "instance_id": "81335d56-b9fe-4679-ba95-7030949cc76b",
        "topic_id": "topic-test"
    }
  • RabbitMQ示例事件
    {
        "event_version": "v1.0",
        "event_time": 1576737962,
        "trigger_type": "RABBITMQ",
        "region": "{region}",
        "records": [
            {
                "messages": [
                    "rabbitmq message1",
                    "rabbitmq message2",
                    "rabbitmq message3",
                    "rabbitmq message4",
                    "rabbitmq message5"
                ],
                "instance_id": "81335d56-b9fe-4679-ba95-7030949cc76b",
                "exchange": "exchange-test"
            }
        ]
    }
    表2 参数说明

    参数

    类型

    示例值

    描述

    event_version

    String

    v1.0

    事件协议的版本

    Region

    String

    xx-xxx-x

    RabbitMQ实例所在的地域,请根据实际情况填写

    instance_id

    String

    81335d56-b9fe-4679-ba95-7030949cc76b

    创建的RabbitMQ实例的唯一标识符。