使用函数计算

函数计算通过事件驱动机制自动处理表格存储的增量数据变更,实现数据变更的实时响应和自动化处理。

工作原理

函数计算通过Tablestore触发器实现对表格存储增量数据的自动处理。当数据表发生变更时,Tablestore Stream实时捕获增量变更信息,触发器监听Stream中的数据变化并自动调用相应函数进行处理,实现数据变更的实时响应和处理。

image

这种事件驱动的处理方式无需轮询检查数据变化,确保数据变更的及时处理并避免资源浪费。相比传统的定时任务或手动处理方式,函数计算提供更高的实时性和自动化水平,通过异步处理和弹性伸缩降低系统复杂度和运维成本,特别适合数据同步、事件通知和增量数据归档等需要实时响应数据变化的场景。

除了事件函数类型外,函数计算还支持Web函数、任务函数等类型。不同函数类型适用于不同的业务场景和技术架构需求,具体的函数类型选择和对比可参见技术选型指南

通过事件函数访问表格存储

步骤一:开启数据表Stream功能

函数计算FCTablestore触发器依赖Stream功能来获取数据表的增量数据变更,需要先为目标数据表开启Stream功能。

目前支持使用Tablestore触发器的地域包括:华北2(北京)、华东1(杭州)、华东2(上海)、华南1(深圳)、日本(东京)、新加坡、德国(法兰克福)和中国香港。
  1. 登录表格存储控制台,在页面上方选择实例所在地域,然后单击目标实例别名。

  2. 实例详情数据表列表单击目标数据表名称。

  3. 单击实时消费通道,然后单击Stream信息右侧的开启

  4. 开启Stream功能对话框,设置日志过期时长,然后单击开启

    日志过期时长取值为非零整数,单位为小时,最长时长为168小时。日志过期时长设置后不能修改,请谨慎设置。

步骤二:创建和配置事件函数

创建Tablestore触发器时,仅支持选择与当前函数处于同一地域的表格存储实例和数据表,请确保函数与目标数据表在同一地域内。

  1. 登录函数计算控制台,在页面上方选择与Tablestore实例一致的地域。

  2. 在左侧菜单栏单击函数管理 > 函数列表

  3. 单击创建函数,选择函数类型为事件函数,然后单击创建事件函数

  4. 按以下说明配置函数参数,详细的配置说明请参见创建事件函数

    • 函数名称:设置唯一标识函数的名称,在同一账号及地域下必须唯一且符合命名规范。

    • 运行环境:推荐选择内置运行时,并选择熟悉的语言和版本,如Python、Java等,此处以Python 3.12为例。

    • 代码上传方式:选择代码上传到函数计算的方式。此处以通过 ZIP 包上传代码为例,可下载并上传示例代码tablestore_trigger_example.zip

  5. 单击创建,完成函数创建。

步骤三:测试和验证事件函数

在配置Tablestore触发器之前,先通过模拟事件测试函数功能。Tablestore触发器使用CBOR格式编码,调试时可通过JSON格式进行模拟。

  1. 函数详情页单击测试函数旁的下拉箭头,然后单击配置测试参数

  2. 填写事件名称,如test-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
                    }
                ]
            }
        ]
    }
  3. 单击测试函数,等待函数测试完成。函数执行成功时,返回结果为OK,单击日志输出可查看函数执行日志。

    2025-11-24 16:02:59 1-69241131-15e0c7d6-8ec1eb81c700 [INFO] Begin to handle event
    2025-11-24 16:02:59 1-69241131-15e0c7d6-8ec1eb81c700 [INFO] --------------------------------------------------
    2025-11-24 16:02:59 1-69241131-15e0c7d6-8ec1eb81c700 [INFO] Event Type: PutRow
    2025-11-24 16:02:59 1-69241131-15e0c7d6-8ec1eb81c700 [INFO] Timestamp: 1506416585740836
    2025-11-24 16:02:59 1-69241131-15e0c7d6-8ec1eb81c700 [INFO] Primary Keys:
    2025-11-24 16:02:59 1-69241131-15e0c7d6-8ec1eb81c700 [INFO]   Name: pk_0, Value: 1506416585881590900
    2025-11-24 16:02:59 1-69241131-15e0c7d6-8ec1eb81c700 [INFO]   Name: pk_1, Value: 2017-09-26 17:03:05.8815909 +0800 CST
    2025-11-24 16:02:59 1-69241131-15e0c7d6-8ec1eb81c700 [INFO]   Name: pk_2, Value: 1506416585741000
    2025-11-24 16:02:59 1-69241131-15e0c7d6-8ec1eb81c700 [INFO] Attribute Columns:
    2025-11-24 16:02:59 1-69241131-15e0c7d6-8ec1eb81c700 [INFO]   Type: Put, Name: attr_0, Value: hello_table_store, Timestamp: 1506416585741
    2025-11-24 16:02:59 1-69241131-15e0c7d6-8ec1eb81c700 [INFO]   Type: Put, Name: attr_1, Value: 1506416585881590900, Timestamp: 1506416585741
    2025-11-24 16:02:59 1-69241131-15e0c7d6-8ec1eb81c700 [INFO] --------------------------------------------------

步骤四:配置和验证触发器

函数测试验证成功后,配置Tablestore触发器以实现数据表变更的自动触发,并通过实际数据操作验证触发器功能。

  1. 函数详情页单击触发器,然后单击创建触发器

  2. 按以下说明配置触发器参数。

    • 触发器类型:选择表格存储 Tablestore

    • 名称:自定义填写触发器名称,如test_trigger

    • 实例:选择目标Tablestore实例。

    • 表格:选择目标数据表。

  3. 单击确定,完成触发器创建。

  4. Tablestore数据表中插入或更新一行数据,此处以在表格存储控制台插入一行数据为例。

  5. 函数详情页单击日志,查看函数调用日志记录和调用结果,单击操作列的请求日志可查看详细日志信息。

    2025-11-24 16:30:12 1-69241793-15071122-c8e16b8b5ce5 [INFO] Begin to handle event
    2025-11-24 16:30:12 1-69241793-15071122-c8e16b8b5ce5 [INFO] --------------------------------------------------
    2025-11-24 16:30:12 1-69241793-15071122-c8e16b8b5ce5 [INFO] Event Type: PutRow
    2025-11-24 16:30:12 1-69241793-15071122-c8e16b8b5ce5 [INFO] Timestamp: 1763973009228992
    2025-11-24 16:30:12 1-69241793-15071122-c8e16b8b5ce5 [INFO] Primary Keys:
    2025-11-24 16:30:12 1-69241793-15071122-c8e16b8b5ce5 [INFO]   Name: id, Value: 8
    2025-11-24 16:30:12 1-69241793-15071122-c8e16b8b5ce5 [INFO]   Name: name, Value: test-name
    2025-11-24 16:30:12 1-69241793-15071122-c8e16b8b5ce5 [INFO] Attribute Columns:
    2025-11-24 16:30:12 1-69241793-15071122-c8e16b8b5ce5 [INFO]   Type: Put, Name: age, Value: 18, Timestamp: 1763973009229
    2025-11-24 16:30:12 1-69241793-15071122-c8e16b8b5ce5 [INFO] --------------------------------------------------

配额与限制

  • 修改函数代码时,请注意不要出现以下逻辑:表格存储数据表A触发函数调用,函数代码又更新数据表A中的数据。这种逻辑会造成函数无限调用问题。

  • 如果函数执行出现异常,函数将无限重试直到Tablestore中的日志数据过期。

    说明
    • 函数执行异常有以下情况:

      • 函数代码运行异常:函数实例已拉起,因此函数实例运行的时间段内会产生费用。

      • 函数启动异常:函数实例由于启动指令错误等原因未成功拉起,此时不会产生费用。

    • 如果函数执行异常,为避免函数无限重试,可以关闭数据表的Stream功能。在关闭数据表的Stream功能前请确认没有其他触发器在使用该数据表,以防导致其他触发器异常。

常见问题

  • 如果无法在某一地域创建Tablestore触发器,请确认支持创建Tablestore触发器的地域。

  • 如果在创建Tablestore触发器时无法找到已经创建好的表格存储数据表,请确认表格存储数据表与函数计算服务是否处于同一地域。

  • 使用Tablestore触发器时,总是会报客户端取消的报错,一般是由于客户端调用函数时设置的超时时间小于函数执行时间。建议将客户端超时时间调大,具体请参见客户端断开连接,报错Invocation canceled by client怎么办?

  • 如果Tablestore数据表中有新增的数据,但是Tablestore触发器没有被触发,可以从以下方面进行排查。

    • 确认数据表是否开启了Stream功能。

    • 确认在创建触发器时配置的角色是否正确,可以使用默认的触发器角色AliyunTableStoreStreamNotificationRole

    • 查看是否有函数运行日志,可以根据日志确认是否是函数执行失败。函数执行失败后,会一直重试直到Tablestore中的日志数据过期。