函数支持的事件源
本节列出了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触发器。
事件 |
说明 |
---|---|
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。
数据接入服务DIS
可以将FunctionGraph函数配置为自动轮询流并处理任何新记录,例如网站点击流、财务交易记录、社交媒体源、IT日志和位置跟踪事件等(DIS示例事件)。FunctionGraph会定期轮询DIS数据流中的新记录。DIS数据流触发函数的过程请参考使用DIS触发器。
定时触发器TIMER
可以使用TIMER的计划事件功能定期调用您的代码,可以指定固定频率(分钟、小时、天数)或指定 cron 表达式定期调用函数(TIMER示例事件)。定时触发器的使用请参考使用定时触发器。
分布式消息服务Kafka版
使用Kafka触发器,当向Kafka实例的Topic生产消息时,FunctionGraph会消费消息,触发函数以执行额外的工作,关于Kafka触发器的使用请参见使用Kafka触发器。
云监控服务CES
FunctionGraph函数实现了与云监控服务对接,函数上报云监控服务的监控指标,用户可以通过云监控服务来查看函数产生的监控指标和告警信息。查看监控指标请参考查看监控图表。
分布式消息服务RabbitMQ版
使用RabbitMQ触发器,FunctionGraph会定期轮询RabbitMQ实例指定Exchange绑定的队列下的新消息,FunctionGraph将轮询得到的消息作为参数传递来调用函数。
示例事件
- SMN示例事件
{ "record": [ { "event_version": "1.0", "smn": { "topic_urn": "urn:smn:{region}:0162c0f220284698b77a3d264376343a:{function_name}", "timestamp": "2018-01-09T07:11:40Z", "message_attributes": null, "message": "this is smn message content", "type": "notification", "message_id": "a51671f77d4a479cacb09e2cd591a983", "subject": "this is smn message subject" }, "event_subscription_urn": "urn:fss:{region}:0162c0f220284698b77a3d264376343a:function:default:read-smn-message:latest", "event_source": "smn" } ], "functionname": "test", "requestId": "7c307f6a-cf68-4e65-8be0-4c77405a1b2c", "timestamp": "Wed Nov 15 2017 12:00:00 GMT+0800 (CST)" }
表2 参数说明 参数
类型
示例值
描述
event_version
String
1.0
事件协议的版本。
topic_urn
String
参考示例
SMN事件唯一编号
type
String
notification
事件的类型
RequestID
String
7c307f6a-cf68-4e65-8be0-4c77405a1b2c
请求ID。每个请求的ID取值唯一。
message_id
String
a51671f77d4a479cacb09e2cd591a983
消息ID。每条消息的ID取值唯一。
Message
String
this is smn message content
消息内容
event_source
String
smn
事件源
event_subscription_urn
String
参考示例
添加的订阅唯一编号
timestamp
String
Wed Nov 15 2017 12:00:00 GMT+0800 (CST)
事件发生的时间
- OBS示例事件
{ "Records": [ { "eventVersion": "2.0", "eventTime": "2018-01-09T07:50:50.028Z", "requestParameters": { "sourceIPAddress": "103.218.216.125" }, "s3": { "configurationId": "UK1DGFPYUKUZFHNQ00000160CC0B471D101ED30CE24DF4DB", "object": { "eTag": "9d377b10ce778c4938b3c7e2c63a229a", "sequencer": "00000000160D9E681484D6B4C0000000", "key": "job.png", "size": 777835 }, "bucket": { "arn": "arn:aws:s3:::syj-input2", "name": "functionstorage-template", "ownerIdentity": { "PrincipalId": "0ed1b73473f24134a478962e631651eb" } } }, "Region": "{region}", "eventName": "ObjectCreated:Post", "userIdentity": { "principalId": "9bf43789b1ff4b679040f35cc4f0dc05" } } ] }
表3 参数说明 参数
类型
示例值
描述
eventVersion
String
2.0
事件协议的版本。
eventTime
String
2018-01-09T07:50:50.028Z
事件产生的时间。使用ISO-8601标准时间格式。
sourceIPAddress
String
103.218.216.125
请求的源IP地址
s3
Map
参考示例
OBS事件内容
object
Map
参考示例
object参数内容
bucket
Map
参考示例
bucket参数内容
arn
String
arn:aws:s3:::syj-input2
Bucket的唯一标识符
ownerIdentity
Map
参考示例
创建Bucket的用户ID
Region
String
ap-southeast-3
Bucket所在的地域
eventName
String
ObjectCreated:Post
配置的触发函数的事件
userIdentity
Map
参考示例
请求发起者的华为云账号ID
- APIG示例事件
{ "body": "{\"test\":\"body\"}", "requestContext": { "apiId": "bc1dcffd-aa35-474d-897c-d53425a4c08e", "requestId": "11cdcdcf33949dc6d722640a13091c77", "stage": "RELEASE" }, "queryStringParameters": { "responseType": "html" }, "httpMethod": "GET", "pathParameters": { "path":"value" }, "headers": { "accept-language": "en-US;q=0.3,en;q=0.2", "accept-encoding": "gzip, deflate, br", "x-forwarded-port": "443", "x-forwarded-for": "103.218.216.98", "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "upgrade-insecure-requests": "1", "host": "50eedf92-c9ad-4ac0-827e-d7c11415d4f1.apigw.region.cloud.com", "x-forwarded-proto": "https", "pragma": "no-cache", "cache-control": "no-cache", "x-real-ip": "103.218.216.98", "user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0" }, "path": "/apig-event-template", "isBase64Encoded": true }
表4 参数说明 参数
类型
示例值
描述
body
String
"{\"test\":\"body\"}"
记录实际请求转换为String字符串后的内容。
requestContext
Map
参考示例
请求来源的API网关的配置信息、请求标识、认证信息、来源信息。
httpMethod
String
GET
记录实际请求的HTTP方法
queryStringParameters
Map
参考示例
记录在API网关中配置过的Query参数以及实际取值。
pathParameters
Map
参考示例
记录在API网关中配置过的Path参数以及实际取值。
headers
Map
参考示例
记录实际请求的完整Header内容
path
String
/apig-event-template
记录实际请求的完整的Path信息
isBase64Encoded
Boolean
True
默认为true
- DIS示例事件
{ "ShardID": "shardId-0000000000", "Message": { "next_partition_cursor": "eyJnZXRJdGVyYXRvclBhcmFtIjp7InN0cmVhbS1uYW1lIjoiZGlzLXN3dGVzdCIsInBhcnRpdGlvbi1pZCI6InNoYXJkSWQtMDAwMDAwMDAwMCIsImN1cnNvci10eXBlIjoiVFJJTV9IT1JJWk9OIiwic3RhcnRpbmctc2VxdWVuY2UtbnVtYmVyIjoiNCJ9LCJnZW5lcmF0ZVRpbWVzdGFtcCI6MTUwOTYwNjM5MjE5MX0", "records": [ { "partition_key": "shardId_0000000000", "data": "d2VsY29tZQ==", "sequence_number": "0" }, { "partition_key": "shardId_0000000000", "data": "dXNpbmc=", "sequence_number": "1" }, { "partition_key": "shardId_0000000000", "data": "RnVuY3Rpb25TdGFnZQ==", "sequence_number": "2" }, { "partition_key": "shardId_0000000000", "data": "c2VydmljZQ==", "sequence_number": "3" } ], "millis_behind_latest": "" }, "Tag": "latest", "StreamName": "dis-swtest" }
表5 参数说明 参数
类型
示例值
描述
ShardID
String
shardId-0000000000
数据下载分区的ID
next_partition_cursor
String
参考示例
下一个分区的游标
Records
Map
参考示例
存储在DIS通道中的数据单元
partition_key
String
参考示例
分区键
data
String
参考示例
数据块,由数据生产者添加到数据通道
sequence_number
Int
参考示例
每个记录的唯一标识符,由DIS服务自动分配
Tag
String
latest
通道的标签
StreamName
String
dis-swtest
通道名称
- TIMER示例事件
{ "version": "v1.0", "time": "2018-06-01T08:30:00+08:00", "trigger_type": "TIMER", "trigger_name": "Timer_001", "user_event": "User Event" }
表6 参数说明 参数
类型
示例值
描述
version
String
V1.0
事件协议的版本
time
String
2018-06-01T08:30:00+08:00
事件产生的时间
trigger_type
String
TIMER
触发器的类型
trigger_name
String
Timer_001
触发器的名字
user_event
String
User Event
在创建触发器时配置的附加信息
- Kafka示例事件
{ "event_version": "v1.0", "event_time": 1576737962, "trigger_type": "KAFKA", "region": "{region}", "instance_id": "81335d56-b9fe-4679-ba95-7030949cc76b", "records": [ { "messages": [ "kafka message1", "kafka message2", "kafka message3", "kafka message4", "kafka message5" ], "topic_id": "topic-test" } ] }
表7 参数说明 参数
类型
示例值
描述
event_version
String
v1.0
事件协议的版本
event_time
String
2018-01-09T07:50:50.028Z
事件发生的时间
trigger_type
String
KAFKA
事件类型
region
String
ap-southeast-3
Kafka实例所在的地域
instance_id
String
81335d56-b9fe-4679-ba95-7030949cc76b
创建的Kafka实例的唯一标识符。
messages
String
参考示例
消息内容
topic_id
String
topic-test
消息的唯一标识符
- GeminiDB示例事件
{ "records": [ { "event_name": "\"insert\"", "event_version": "1.0", "event_source": "gemini_mongo", "region": "{region}", "gemini_mongo": { "full_document": "{\"_id\": {\"$oid\":\"5f61de944778db5fcded3f87\"},\"zhangsan\": \"zhangsan\"}", "ns": "{\"db\": \"zhangsan\",\"coll\": \"zhangsan\"}", "size_bytes": "100", "token": "{\"_data\": \"825F61DE940000000129295A1004A2D9AE61206C43A5AF47CAF7C5C00C5946645F696400645F61DE944778DB5FCDED3F870004\"}" }, "event_source_id": "51153d19-2b7d-402c-9a79-757163258a36" } ], "vernier": "{\"_data\": \"825F61DE940000000129295A1004A2D9AE61206C43A5AF47CAF7C5C00C5946645F696400645F61DE944778DB5FCDED3F870004\"}" }
表8 参数说明 参数
类型
示例值
描述
region
String
ap-southeast-3
GeminiDB实例所在的地域
event_source
String
gemini_mongo
事件的来源
event_version
String
1.0
事件协议的版本
full_document
String
参考示例
完整的文件信息
size_bytes
Int
100
消息的字节数
token
String
参考示例
Base64编码后的数据
vernier
String
参考示例
游标
- 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" } ] }
表9 参数说明 参数
类型
示例值
描述
event_version
String
v1.0
事件协议的版本
Region
String
ap-southeast-3
RabbitMQ实例所在的地域
instance_id
String
81335d56-b9fe-4679-ba95-7030949cc76b
创建的RabbitMQ实例的唯一标识符。