本文介紹使用Function Compute編寫代碼相關的基礎概念資訊,包括請求處理常式、函數執行個體生命週期回調方法、日誌記錄和錯誤處理等。
請求處理常式
在建立函數時,您需要指定請求處理常式。Function Compute的運行時會載入並調用您的請求處理常式處理請求。
對於內建運行時,請求處理常式只有一種格式,您可以使用請求處理常式處理各種事件來源的事件請求,例如OSS觸發器、SLS觸發器、RocketMQ觸發器和EventBridge觸發器等。也可以建立HTTP觸發器,使用HTTP觸發器提供的URI直接觸發函數。
自訂運行時和自訂鏡像運行時的請求處理常式與內建運行時的請求處理常式不同。更多資訊,請參見Web函數。
您可以在Function Compute控制台配置請求處理常式。具體操作,請參見建立函數。
函數執行個體生命週期回調方法
按量模式的函數執行個體可供按需建立。閑置時,按量執行個體會被凍結,凍結一段時間會被銷毀。當執行個體狀態發生變化時,您可以配置執行個體生命週期回調方法,回調執行個體狀態。Function Compute所有運行時支援Initializer和PreStop兩種生命週期回調方法。更多資訊,請參見配置執行個體生命週期。
Initializer回調
Initializer回調在函數執行個體啟動成功之後,執行請求處理常式之前執行。Function Compute保證在一個執行個體生命週期內,成功執行且只能成功執行一次Initializer回調。例如,您的Initializer回調首次執行失敗後系統會重試,直到成功為止,然後再執行您的請求處理常式。
您可以將資料庫情境下串連池構建、函數依賴庫載入等耗時較長的商務邏輯放到Initializer回調中,避免每次運行函數都會做重複的操作,降低函數延時。
PreStop回調
PreStop回調在函數執行個體銷毀前執行,您可以使用PreStop回調完成執行個體銷毀前的必要操作,例如,關閉資料庫連結,以及上報、更新狀態等。
日誌記錄
您需要佈建服務層級的日誌庫,Function Compute會將函數日誌發送到指定日誌庫中。更多資訊,請參見配置日誌。
通過控制台建立服務時,Function Compute預設為您配置日誌庫。
Function Compute與日誌記錄集成,將函數調用的記錄以及函數代碼中列印的日誌全部儲存到日誌庫中。您可以使用Function Compute提供的日誌語句記錄函數日誌,方便調試及定位問題。各種程式設計語言的列印日誌語句,如下表所示。
開發語言 | 程式設計語言內嵌的列印日誌語句 | Function Compute提供的日誌語句 | 參考文檔 |
Node.js | console.log() | context.logger.info() | |
Python | print() | logging.getLogger().info() | |
Java | System.out.println() | context.getLogger().info() | |
PHP | echo "" . PHP_EOL | $GLOBALS['fcLogger']->info() | |
C# | Console.WriteLine("") | context.Logger.LogInformation() | |
Golang | log.Println() | fctx, _ := fccontext.FromContext(ctx) fctx.GetLogger().Info() |
使用程式設計語言內嵌的列印輸出語句列印的日誌也會被收集到日誌庫裡,而使用Function Compute提供的日誌語句列印的每條日誌前都會帶上請求ID,方便日誌的篩選。
#使用程式設計語言內嵌的列印輸入語句列印的日誌
# print('hello world')
message: hello world
#使用Function Compute提供的日誌語句列印的日誌
# logger.info('hello world')
message: 2020-03-13T04:06:49.099Z f84a9f4f-2dfb-41b0-9d6c-1682a2f3a650 [INFO] hello world
日誌組成
函數作業記錄包括服務名稱、函數名稱、當前執行版本、別名和代碼日誌。
函數作業記錄資料結構如下所示:
__source__:
__tag__:__receive_time__: 1584072413
__topic__: FCLogs:myFunction
functionName: myFunction
message: 2020-03-13T04:06:49.099Z f84a9f4f-2dfb-41b0-9d6c-1682a2f3a650 [INFO] hello world
qualifier: LATEST
serviceName: myService
versionId:
在函數開始執行時,系統會列印
FC Invoke Start RequestId: f84a9f4f-2dfb-41b0-9d6c-1682a2f3a650
,標誌函數執行開始。在函數執行完成時,系統會列印
FC Invoke End RequestId: f84a9f4f-2dfb-41b0-9d6c-1682a2f3a650
,標誌函數執行結束。
作業系統環境
Function Compute的內建運行時提供Debian9 LTS和Debian10 LTS兩種作業系統,兩種作業系統僅支援x86_64架構。