全部產品
Search
文件中心

Tablestore:使用Function Compute

更新時間:Nov 25, 2025

Function Compute通過事件驅動機制自動處理Table Store的增量資料變更,實現資料變更的即時響應和自動化處理。

工作原理

Function Compute通過Tablestore觸發器實現對錶格儲存增量資料的自動處理。當資料表發生變更時,Tablestore Stream即時捕獲增量變更資訊,觸發器監聽Stream中的資料變化並自動調用相應函數進行處理,實現資料變更的即時響應和處理。

這種事件驅動的處理方式無需輪詢檢查資料變化,確保資料變更的及時處理並避免資源浪費。相比傳統的定時任務或手動處理方式,Function Compute提供更高的即時性和自動化水平,通過非同步處理和Auto Scaling降低系統複雜度和營運成本,特別適合資料同步、事件通知和增量資料歸檔等需要即時響應資料變化的情境。

除了事件函數類型外,Function Compute還支援Web函數、任務函數等類型。不同函數類型適用於不同的業務情境和技術架構需求,具體的函數類型選擇和對比可參見技術選型指南

通過事件函數訪問Table Store

步驟一:開啟資料表Stream功能

Function ComputeFC的Tablestore觸發器依賴Stream功能來擷取資料表的增量資料變更,需要先為目標資料表開啟Stream功能。

目前支援使用Tablestore觸發器的地區包括:華北2(北京)、華東1(杭州)、華東2(上海)、華南1(深圳)、日本(東京)、新加坡、德國(法蘭克福)和中國香港。
  1. 登入Table Store控制台,在頁面上方選擇執行個體所在地區,然後單擊目標執行個體別名。

  2. 執行個體詳情資料表列表單擊目標資料表名稱。

  3. 單擊即時消費通道,然後單擊Stream資訊右側的開啟

  4. 開啟Stream功能對話方塊,設定日誌到期時間長度,然後單擊開啟

    日誌到期時間長度取值為非零整數,單位為小時,最長時間長度為168小時。日誌到期時間長度設定後不能修改,請謹慎設定。

步驟二:建立和配置事件函數

建立Tablestore觸發器時,僅支援選擇與當前函數處於同一地區的Table Store執行個體和資料表,請確保函數與目標資料表在同一地區內。

  1. 登入Function Compute控制台,在頁面上方選擇與Tablestore執行個體一致的地區。

  2. 在左側功能表列單擊函數管理 > 函數列表

  3. 單擊建立函數,選擇函數類型為事件函數,然後單擊建立事件函數

  4. 按以下說明配置函數參數,詳細的配置說明請參見建立事件函數

    • 函數名稱:設定唯一標識函數的名稱,在同一帳號及地區下必須唯一且符合命名規範。

    • 運行環境:推薦選擇內建運行時,並選擇熟悉的語言和版本,如Python、Java等,此處以Python 3.12為例。

    • 代碼上傳方式:選擇代碼上傳到Function Compute的方式。此處以通過 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. 按以下說明配置觸發器參數。

    • 觸發器類型:選擇Table Store Tablestore

    • 名稱:自訂填寫觸發器名稱,如test_trigger

    • 執行個體:選擇目標Tablestore執行個體。

    • 表格:選擇目標資料表。

  3. 單擊確定,完成觸發器建立。

  4. 在Tablestore資料表中插入或更新一行資料,此處以在Table Store控制台插入一行資料為例。

  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] --------------------------------------------------

配額與限制

  • 修改函數代碼時,請注意不要出現以下邏輯:Table Store資料表A觸發函數調用,函數代碼又更新資料表A中的資料。這種邏輯會造成函數無限調用問題。

  • 如果函數執行出現異常,函數將無限重試直到Tablestore中的日誌資料到期。

    說明
    • 函數執行異常有以下情況:

      • 函數代碼運行異常:函數執行個體已拉起,因此函數執行個體啟動並執行時間段內會產生費用。

      • 函數啟動異常:函數執行個體由於啟動指令錯誤等原因未成功拉起,此時不會產生費用。

    • 如果函數執行異常,為避免函數無限重試,可以關閉資料表的Stream功能。在關閉資料表的Stream功能前請確認沒有其他觸發器在使用該資料表,以防導致其他觸發器異常。

常見問題

  • 如果無法在某一地區建立Tablestore觸發器,請確認支援建立Tablestore觸發器的地區。

  • 如果在建立Tablestore觸發器時無法找到已經建立好的Table Store資料表,請確認Table Store資料表與Function Compute服務是否處於同一地區。

  • 使用Tablestore觸發器時,總是會報用戶端取消的報錯,一般是由於用戶端調用函數時設定的逾時時間小於函數執行時間。建議將用戶端逾時時間調大,具體請參見用戶端中斷連線,報錯Invocation canceled by client怎麼辦?

  • 如果Tablestore資料表中有新增的資料,但是Tablestore觸發器沒有被觸發,可以從以下方面進行排查。

    • 確認資料表是否開啟了Stream功能。

    • 確認在建立觸發器時配置的角色是否正確,可以使用預設的觸發器角色AliyunTableStoreStreamNotificationRole

    • 查看是否有函數作業記錄,可以根據日誌確認是否是函數執行失敗。函數執行失敗後,會一直重試直到Tablestore中的日誌資料到期。