完成Tablestore触发器的创建后,当Tablestore中的数据更新时会自动触发函数执行,对这些数据进行自定义处理。本文以使用Tablestore触发器触发函数获取数据为例,介绍如何在函数计算控制台完成Tablestore触发器的配置,包括创建触发器、编写函数和测试函数。

前提条件

创建触发器

  1. 登录函数计算控制台
  2. 在左侧导航栏,单击服务及函数
  3. 在顶部菜单栏,选择地域。
  4. 服务列表页面,找到目标服务,在其右侧操作列单击函数管理
  5. 函数管理页面,单击目标函数名称。
    hanshuguanli
  6. 在函数详情页面,单击触发器管理页签,从版本或别名下拉列表选择要创建触发器的版本或别名,然后单击创建触发器
    创建触发器
  7. 创建触发器面板,填写相关信息,然后单击确定
    创建触发器面板-table
    参数 操作 本文示例
    触发器类型 选择表格存储 Tablestore 表格存储Tablestore
    名称 自定义填写触发器名称。 Tablestore-trigger
    版本或别名 默认值为LATEST,如果您需要创建其他版本或别名的触发器,需先在函数详情页的版本或别名下拉列表选择该版本或别名。关于版本简介,请参见版本简介 LATEST
    实例 在列表中选择已创建的Tablestore实例。 d00dd8xm****
    表格 在列表中选择已创建的表格。 mytable
    角色名称 选择AliyunTableStoreStreamNotificationRole
    说明 如果您第一次创建该类型的触发器,则需要在单击确定后,在弹出的对话框中选择立即授权
    AliyunTableStoreStreamNotificationRole

    创建完成后,在触发器名称列表中显示已创建的触发器。

    tablestore-trigger

编写函数

完成Tablestore触发器创建后,您可以开始编写函数代码。

在函数详情页面,单击函数代码页签,在代码编辑器中编写代码。
本文以Python函数代码为例。如果您想使用其他运行环境,更多代码示例,请参见表格存储触发函数计算示例
import logging
import cbor
import json
 def get_attribute_value(record, column):
     attrs = record[u'Columns']
     for x in attrs:
         if x[u'ColumnName'] == column:
             return x['Value']
 def get_pk_value(record, column):
     attrs = record[u'PrimaryKey']
     for x in attrs:
         if x['ColumnName'] == column:
             return x['Value']
 def handler(event, context):
     logger = logging.getLogger()
     logger.info("Begin to handle event")
     #records = cbor.loads(event)
     records = json.loads(event)
     for record in records['Records']:
         logger.info("Handle record: %s", record)
         pk_0 = get_pk_value(record, "pk_0")
         attr_0 = get_attribute_value(record, "attr_0")
     return 'OK'

测试函数

完成函数编写后,您需要调试函数以验证代码的正确性。在实际操作过程中当Tablestore中有数据更新时会自动触发函数执行。

  1. 在函数详情页面,单击函数代码页签,然后单击xialatubiao图标,从下拉列表中,选择配置测试参数
  2. 配置测试参数对话框,选择创建新测试事件编辑已有测试事件页签,填写事件名称和事件内容。然后单击确定

    表格存储触发器使用CBOR格式对增量数据进行编码,构成函数计算的event。具体格式如下所示。

    {
        "Version": "Sync-v1",
        "Records": [
            {
                "Type": "PutRow",
                "Info": {
                    "Timestamp": 1506416585740836
                },
                "PrimaryKey": [
                    {
                        "ColumnName": "pk_0",
                        "Value": 1506416585881590900
                    },
                    {
                        "ColumnName": "pk_1",
                        "Value": "2017-09-26 17:03:05.8815909 +0800 CST"
                    },
                    {
                        "ColumnName": "pk_2",
                        "Value": 1506416585741000
                    }
                ],
                "Columns": [
                    {
                        "Type": "Put",
                        "ColumnName": "attr_0",
                        "Value": "hello_table_store",
                        "Timestamp": 1506416585741
                    },
                    {
                        "Type": "Put",
                        "ColumnName": "attr_1",
                        "Value": 1506416585881590900,
                        "Timestamp": 1506416585741
                    }
                ]
            }
        ]
    }
    event中涉及的参数解释如下表所示。
    参数 类型 示例值 描述
    Version String Sync-v1 Payload版本号。
    Records Array 数据表中的增量数据行数组。
    Type String PutRow 数据行类型,取值说明如下:
    • PutRow:插入一行数据。
    • UpdateRow:更新指定行数据。
    • DeleteRow:删除指定行。
    Info String 数据行基本信息。
    Timestamp Int64 1506416585740836 该数据行的最后修改UTC时间。
    PrimaryKey Array 主键列数组。
    ColumnName String pk_0 主键列名称。
    Value String、Integer或Blob 1506416585881590900 主键列内容。
    Columns Array 属性列数组。
    Type String Put 属性列类型,取值说明如下:
    • Put:增加一个版本。
    • DeleteOneVersion:删除一个版本。
    • DeleteAllVersions:删除所有版本。
    ColumnName String attr_0 属性列名称。
    Value Integer、Boolean、Double、String或Blob hello_table_store 属性列内容。
    Timestamp Int64 1506416585741 属性列最后修改UTC时间。
  3. 在函数详情页面,单击函数代码页签,然后单击测试函数

更多信息

除了函数计算控制台,您还可通过以下方式配置触发器:
  • 通过Serverless Devs工具配置触发器。更多操作,请参见Serverless Devs
  • 通过SDK配置触发器。更多操作,请参见SDK列表

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