本文介紹使用函數計算編寫代碼相關的基礎概念信息,包括請求處理程序、函數實例生命周期回調方法、日志記錄和錯誤處理等。
請求處理程序
在創建函數時,您需要指定請求處理程序。函數計算的運行時會加載并調用您的請求處理程序處理請求。
對于內置運行時,請求處理程序只有一種格式,您可以使用請求處理程序處理各種事件源的事件請求,例如OSS觸發器、SLS觸發器、RocketMQ觸發器和EventBridge觸發器等。也可以創建HTTP觸發器,使用HTTP觸發器提供的URI直接觸發函數。
自定義運行時和自定義鏡像運行時的請求處理程序與內置運行時的請求處理程序不同。更多信息,請參見Web函數。
函數實例生命周期回調方法
按量模式的函數實例可供按需創建。閑置時,按量實例會被凍結,凍結一段時間會被銷毀。當實例狀態發生變化時,您可以配置實例生命周期回調方法,回調實例狀態。函數計算所有運行時支持Initializer和PreStop兩種生命周期回調方法。更多信息,請參見配置實例生命周期。
Initializer回調
Initializer回調在函數實例啟動成功之后,執行請求處理程序之前執行。函數計算保證在一個實例生命周期內,成功執行且只能成功執行一次Initializer回調。例如,您的Initializer回調首次執行失敗后系統會重試,直到成功為止,然后再執行您的請求處理程序。
您可以將數據庫場景下連接池構建、函數依賴庫加載等耗時較長的業務邏輯放到Initializer回調中,避免每次運行函數都會做重復的操作,降低函數延時。
PreStop回調
PreStop回調在函數實例銷毀前執行,您可以使用PreStop回調完成實例銷毀前的必要操作,例如,關閉數據庫鏈接,以及上報、更新狀態等。
日志記錄
您需要配置服務級別的日志庫,函數計算會將函數日志發送到指定日志庫中。更多信息,請參見配置日志。
通過控制臺創建服務時,函數計算默認為您配置日志庫。
函數計算與日志記錄集成,將函數調用的記錄以及函數代碼中打印的日志全部存儲到日志庫中。您可以使用函數計算提供的日志語句記錄函數日志,方便調試及定位問題。各種編程語言的打印日志語句,如下表所示。
開發語言 | 編程語言內嵌的打印日志語句 | 函數計算提供的日志語句 | 參考文檔 |
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() |
使用編程語言內嵌的打印輸出語句打印的日志也會被收集到日志庫里,而使用函數計算提供的日志語句打印的每條日志前都會帶上請求ID,方便日志的篩選。
#使用編程語言內嵌的打印輸入語句打印的日志
# print('hello world')
message: hello world
#使用函數計算提供的日志語句打印的日志
# 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
,標志函數執行結束。
操作系統環境
函數計算的內置運行時提供Debian9 LTS和Debian10 LTS兩種操作系統,兩種操作系統僅支持x86_64架構。