全部产品
Search
文档中心

函数计算:配置云产品事件触发器

更新时间:Oct 20, 2023

云产品事件触发器能够实现通过阿里云产品事件触发函数执行,这些事件主要包括云监控事件、审计事件、云服务器事件、阿里云物联网IoT事件和部分云产品运维事件等云产品事件。本文以云服务器为例,介绍如何在控制台创建阿里云产品事件触发器、配置函数入口参数和编写代码等。

功能简介

您在函数计算控制台提交创建触发器的请求后,函数计算根据触发器的配置信息,将自动在阿里云官方事件总线default下创建一个事件规则函数名称-触发器名称。创建完成后,您可以在函数计算控制台查看触发器信息,也可以在事件总线EventBridge控制台查看自动创建的事件规则信息。当事件源指定类型的事件投递到事件总线时,将触发该触发器关联的函数执行一次。

注意事项

  • 事件总线EventBridge的云服务专用事件总线default上最多只能创建10个事件规则,超过10个之后将无法再创建云产品事件触发器。

  • 云产品事件触发器不支持通过Serverless Devs工具创建。

前提条件

步骤一:创建触发器

  1. 登录函数计算控制台,在左侧导航栏,单击函数

  2. 在顶部菜单栏,选择地域,然后在函数页面,单击目标函数。

  3. 在函数配置页面,选择配置页签,在左侧导航栏,单击触发器,然后单击创建触发器

  4. 在创建触发器面板,填写相关信息,然后单击确定

    配置项

    操作

    本文示例

    触发器类型

    选择云服务器ECS

    云服务器ECS

    名称

    填写自定义的触发器名称。

    ecs-trigger

    版本或别名

    默认值为LATEST,如果您需要创建其他版本或别名的触发器,首先您需要在函数详情页的右上角切换到该版本或别名。关于版本和别名的简介,请参见管理版本管理别名

    LATEST

    事件类型

    选择自定义事件类型选中全部事件类型。如果选择自定义事件类型,您可以选择云服务器的一个或多个事件类型。

    保留云盘

    事件模式内容

    不支持手动编辑,您在事件类型参数中选择事件类型后,事件模式内容自动填充。关于事件模式的信息,请参见事件模式

    {
        "source": [
            "acs.ecs"
        ],
        "type": [
            "ecs:Disk:ConvertToPostpaidCompleted"
        ]
    }

    调用方式

    选择函数调用方式,取值说明如下:

    • 同步调用:默认调用方式,事件触发函数执行,等待函数调用完成后,函数计算返回执行结果。更多信息,请参见同步调用

    • 异步调用:适用于调度延时较长的函数,事件触发函数执行后,函数计算立即返回响应结果并且确保函数至少被成功执行一次,但不会返回具体执行结果。更多信息,请参见功能概览

    同步调用

    触发器启用状态

    创建触发器后是否立即启用。默认勾选启用触发器,即创建触发器后立即启用触发器。

    启用触发器

    创建完成后,在触发器名称列表中显示已创建的触发器。如需对创建的触发器进行修改或删除,具体操作,请参见触发器管理

步骤二:配置函数入口参数

云服务器ECS的事件会以event的形式作为输入参数传递给函数,您可以手动将event传给函数模拟触发事件。

  1. 在函数配置页面的代码页签,单击测试函数右侧的image.png图标,从下拉列表中,选择配置测试参数

  2. 配置测试参数面板,选择创建新测试事件编辑已有测试事件,填写事件名称和事件内容,然后单击确定。

    event格式如下所示。关于支持的所有官方事件源的事件内容,请参见阿里云官方事件源

    {
        "datacontenttype": "application/json;charset=utf-8",
        "aliyunaccountid": "123456789098****",
        "data": {
            "result": "accomplished",
            "diskId": "d-bp11ba7acc69nkta****"
        },
        "subject": "acs:ecs:cn-hangzhou:123456789098****:disk/d-bp11ba7acc69nkta****",
        "source": "acs.ecs",
        "type": "ecs:Disk:ConvertToPostpaidCompleted",
        "aliyunpublishtime": "2021-01-18T03:58:31.762Z",
        "specversion": "1.0",
        "aliyuneventbusname": "default",
        "id": "70c0414c-b260-4923-b584-1d6e5646****",
        "time": "2021-01-18T11:58:31.125+08:00",
        "aliyunregionid": "cn-hangzhou",
        "aliyunpublishaddr": "172.25.XX.XX"
    }

    event中涉及的参数解释如下表所示。

    参数

    类型

    示例值

    描述

    datacontenttype

    String

    application/json;charset=utf-8

    参数data的内容形式。datacontenttype只支持application/json格式。

    aliyunaccountid

    String

    123456789098****

    阿里云账号ID。

    data

    Struct

    {
            "result": "accomplished",
            "diskId": "d-bp11ba7acc69nkta****"
    }

    事件内容。JSON对象,内容由发起事件的服务决定。CloudEvents可能包含事件发生时由事件生产者给定的上下文,data中封装了这些信息。

    subject

    String

    acs:ecs:cn-hangzhou:123456789098****:disk/d-bp11ba7acc69nkta****

    事件主题。

    source

    String

    acs.ecs

    事件源。

    type

    String

    ecs:Disk:ConvertToPostpaidCompleted

    事件类型。

    aliyunpublishtime

    Timestamp

    2021-01-18T03:58:31.762Z

    接收事件的时间。

    specversion

    String

    1.0

    CloudEvents协议版本。

    aliyuneventbusname

    String

    default

    接收事件的事件总线名称。

    id

    String

    70c0414c-b260-4923-b584-1d6e5646****

    事件ID。

    time

    Timestamp

    2021-01-18T11:58:31.125+08:00

    事件产生的时间。

    aliyunregionid

    String

    cn-hangzhou

    接收事件的地域。

    aliyunpublishaddr

    String

    172.25.XX.XX

    接收事件的服务器地址。

步骤三:编写函数代码并测试

完成云服务器触发器的创建之后,您可以开始编写函数代码并测试以验证代码的正确性。在实际操作过程中,当阿里云官方事件源云服务器ECS产生的事件通过事件总线EventBridge投递到函数计算时,触发器会自动触发函数的执行。

  1. 在函数配置页面的代码页签,在代码编辑器中编写代码,然后单击部署代码

    本文以Node.js函数代码为例。

    'use strict';
    /*
    To enable the initializer feature
    please implement the initializer function as below:
    exports.initializer = (context, callback) => {
      console.log('initializing');
      callback(null, '');
    };
    */
    exports.handler = (event, context, callback) => {
      console.log("event: %s", event);
      //解析event参数,对event进行处理。
      callback(null, 'return result');
    }
  2. 单击测试函数

更多信息

如需对创建的触发器进行修改或删除,具体操作,请参见触发器管理