更新时间:2023-02-28 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。

数据接入服务DIS

可以将FunctionGraph函数配置为自动轮询流并处理任何新记录,例如网站点击流、财务交易记录、社交媒体源、IT日志和位置跟踪事件等(DIS示例事件)。FunctionGraph会定期轮询DIS数据流中的新记录。DIS数据流触发函数的过程请参考使用DIS触发器。

定时触发器TIMER

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

日志触发器LTS

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

分布式消息服务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": {
                        
                        "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参数内容

    ownerIdentity

    Map

    参考示例

    创建Bucket的用户ID

    Region

    String

    -ae-ad-1

    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
    }

    通过APIG服务调用函数服务时,isBase64Encoded的值默认为true,表示APIG传递给FunctionGraph的请求体body已经进行Base64编码,需要先对body内容Base64解码后再处理。

    表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

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

    {
        "isBase64Encoded": true|false,
        "statusCode": httpStatusCode,
        "headers": {"headerName":"headerValue",...},
        "body": "..."
    }
  • 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

    在创建触发器时配置的附加信息

  • LTS示例事件
    {
        "lts": {
            "data": "ICB7CiAgICAibG9ncyI6W3sKICAgICAgICAgIm1lc3NhZ2UiOiIyMDE4LTA4LTA4LzA4OjA4OjA4IFtXUk5dIFt0ZXN0LmdvOjA4XVRoaXMgaXMgYSB0ZXN0IG1lc3NhZ2UuIiwKICAgICAgICAgInRpbWUiOjE1MzAwMDk2NTMwNTksCiAgICAgICAgICJob3N0X25hbWUiOiJlY3MtdGVzdCIsCiAgICAgICAgICJpcCI6IjE5Mi4xNjguMS4xIiwKICAgICAgICAgInBhdGgiOiJ2YXIvbG9nL3Rlc3QubG9nIiwKICAgICAgICAgImxvZ191aWQiOiI2NjNkNjkzMC03OTJkLTExZTgtOGIwOC0yODZlZDQ4OGNlNzAiLAogICAgICAgICAibGluZV9ubyI6MQogICAgIH1dLAogICAgIm93bmVyIjogIjYyODBlMTcwYmQ5MzRmNjBhNGQ4NTFjZjVjYTA1MTI5IiwKICAgICJsb2dfZ3JvdXBfaWQiOiAiOTdhOWQyODQtNDQ0OC0xMWU4LThmYTQtMjg2ZWQ0ODhjZTcwIiwKICAgICJsb2dfdG9waWNfaWQiOiAiMWE5Njc1YTctNzg0ZC0xMWU4LTlmNzAtMjg2ZWQ0ODhjZTcwIgogfQ=="
        }
    }
    表7 Event中涉及的参数解释

    参数

    类型

    示例值

    描述

    data

    Sting

    参考示例

    Base64编码后的数据

  • 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"
            }
        ]
    }
    表8 参数说明

    参数

    类型

    示例值

    描述

    event_version

    String

    v1.0

    事件协议的版本

    event_time

    String

    2018-01-09T07:50:50.028Z

    事件发生的时间

    trigger_type

    String

    KAFKA

    事件类型

    region

    String

    ae-ad-1

    Kafka实例所在的地域

    instance_id

    String

    81335d56-b9fe-4679-ba95-7030949cc76b

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

    messages

    String

    参考示例

    消息内容

    topic_id

    String

    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"
            }
        ]
    }
    表9 参数说明

    参数

    类型

    示例值

    描述

    event_version

    String

    v1.0

    事件协议的版本

    Region

    String

    ae-ad-1

    RabbitMQ实例所在的地域

    instance_id

    String

    81335d56-b9fe-4679-ba95-7030949cc76b

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