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

前提条件

步骤一:创建Tablestore触发器

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

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

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

  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 Payload版本号。示例如Sync-v1。类型为String。
    Records 数据表中的增量数据行数组。包含如下内部成员:
    • Type:数据行类型,包含PutRow、UpdateRow和DeleteRow。类型为String。
    • Info:包含Timestamp内部成员。Timestamp表示该行的最后修改UTC时间。类型为Int64。
    PrimaryKey 主键列数组。包含如下内部成员:
    • ColumnName:主键列名称。类型为String。
    • Value:主键列内容。类型为formated_value,支持Integer、String和Blob。
    Columns 属性列数组。包括如下内部成员:
    • Type:属性列类型,包含Put、DeleteOneVersion和DeleteAllVersions。类型为String。
    • ColumnName:属性列名称。类型为String。
    • Value:属性列内容。类型为formated_value,支持Integer、Boolean、Double、String和Blob。
    • Timestamp:属性列最后修改UTC时间。类型为Int64。

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

完成Tablestore触发器创建后,您可以开始编写函数代码并测试,以验证代码的正确性。在实际操作过程中当Tablestore中有数据更新时会自动触发函数执行。

  1. 在函数详情页面,单击函数代码页签,在代码编辑器中编写代码,然后单击保存并部署
    本文以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'
  2. 单击函数代码页签的测试函数
    执行完成后,您可以在函数代码页签的上方查看执行结果。

更多信息

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

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