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(深圳)、日本(東京)、新加坡、德國(法蘭克福)和中國香港。
登入Table Store控制台,在頁面上方選擇執行個體所在地區,然後單擊目標執行個體別名。
在執行個體詳情的資料表列表單擊目標資料表名稱。
單擊即時消費通道,然後單擊Stream資訊右側的開啟。
在開啟Stream功能對話方塊,設定日誌到期時間長度,然後單擊開啟。
日誌到期時間長度取值為非零整數,單位為小時,最長時間長度為168小時。日誌到期時間長度設定後不能修改,請謹慎設定。
步驟二:建立和配置事件函數
建立Tablestore觸發器時,僅支援選擇與當前函數處於同一地區的Table Store執行個體和資料表,請確保函數與目標資料表在同一地區內。
登入Function Compute控制台,在頁面上方選擇與Tablestore執行個體一致的地區。
在左側功能表列單擊。
單擊建立函數,選擇函數類型為事件函數,然後單擊建立事件函數。
按以下說明配置函數參數,詳細的配置說明請參見建立事件函數。
函數名稱:設定唯一標識函數的名稱,在同一帳號及地區下必須唯一且符合命名規範。
運行環境:推薦選擇內建運行時,並選擇熟悉的語言和版本,如Python、Java等,此處以Python 3.12為例。
代碼上傳方式:選擇代碼上傳到Function Compute的方式。此處以通過 ZIP 包上傳代碼為例,可下載並上傳範例程式碼tablestore_trigger_example.zip。
單擊建立,完成函數建立。
步驟三:測試和驗證事件函數
在配置Tablestore觸發器之前,先通過類比事件測試函數功能。Tablestore觸發器使用CBOR格式編碼,調試時可通過JSON格式進行類比。
在函數詳情頁單擊測試函數旁的下拉式箭頭,然後單擊配置測試參數。
填寫事件名稱,如
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 } ] } ] }單擊測試函數,等待函數測試完成。函數執行成功時,返回結果為
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觸發器以實現資料表變更的自動觸發,並通過實際資料操作驗證觸發器功能。
在函數詳情頁單擊觸發器,然後單擊建立觸發器。
按以下說明配置觸發器參數。
觸發器類型:選擇Table Store Tablestore。
名稱:自訂填寫觸發器名稱,如
test_trigger。執行個體:選擇目標Tablestore執行個體。
表格:選擇目標資料表。
單擊確定,完成觸發器建立。
在Tablestore資料表中插入或更新一行資料,此處以在Table Store控制台插入一行資料為例。
在函數詳情頁單擊日誌,查看函數調用日誌記錄和調用結果,單擊操作列的請求日誌可查看詳細日誌資訊。
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中的日誌資料到期。