本文介紹Custom Runtime的公共請(qǐng)求頭、響應(yīng)碼和響應(yīng)頭以及日志格式,您可以參見(jiàn)這些信息打造屬于您的自定義運(yùn)行環(huán)境。

函數(shù)計(jì)算公共請(qǐng)求頭

Custom Runtime從函數(shù)計(jì)算中接收到的公共請(qǐng)求頭如下表所示。如果您需要訪問(wèn)阿里云其他服務(wù),您可能需要用到臨時(shí)AccessKey的Headers。如果您需要遷移已有的應(yīng)用,可忽略下文的內(nèi)容。

說(shuō)明
  • 事件函數(shù)和HTTP函數(shù)均包含Common Headers。
  • 公共請(qǐng)求頭是函數(shù)計(jì)算自動(dòng)生成的,主要包含權(quán)限信息和函數(shù)的基本信息等。
Header 描述
x-fc-request-id Request ID。
x-fc-access-key-id 臨時(shí)AccessKey ID。
x-fc-access-key-secret 臨時(shí)AccessKey Secret。
x-fc-security-token 臨時(shí)Security Token。
x-fc-function-handler 函數(shù)的Handler,如果Runtime本身就是函數(shù)(例如Custom Runtime或者Custom Container函數(shù)),則該值無(wú)意義,設(shè)置為一個(gè)隨機(jī)字符串即可。
x-fc-function-memory 函數(shù)最大能使用的內(nèi)存。
x-fc-function-initializer Initializer函數(shù)的Handler,如果Runtime本身就是函數(shù)(例如Custom Runtime或者Custom Container函數(shù)),則該值無(wú)意義,設(shè)置為一個(gè)隨機(jī)字符串即可。
x-fc-initialization-timeout Initializer函數(shù)執(zhí)行的超時(shí)時(shí)間。
x-fc-instance-lifecycle-pre-stop-handler PreStop函數(shù)的Handler,如果Runtime本身就是函數(shù)(例如Custom Runtime或者Custom Container函數(shù)),則該值無(wú)意義,設(shè)置為一個(gè)隨機(jī)字符串即可。
x-fc-instance-lifecycle-pre-freeze-handler PreFreeze函數(shù)的Handler,如果Runtime本身就是函數(shù)(例如Custom Runtime或者Custom Container函數(shù)),則該值無(wú)意義,設(shè)置為一個(gè)隨機(jī)字符串即可。
x-fc-region 函數(shù)所在的地域。
x-fc-account-id 函數(shù)所有者的UID。
x-fc-qualifier 函數(shù)調(diào)用時(shí)指定的服務(wù)版本或別名。更多信息,請(qǐng)參見(jiàn)灰度發(fā)布示例。
x-fc-version-id 函數(shù)調(diào)用時(shí)指定的服務(wù)版本。
x-fc-function-name 函數(shù)名稱。
x-fc-service-name 函數(shù)所在的服務(wù)的名字。
x-fc-service-logproject 函數(shù)所在服務(wù)配置的日志項(xiàng)目。
x-fc-service-logstore 函數(shù)所在服務(wù)配置的日志庫(kù)。
x-fc-control-path 函數(shù)的請(qǐng)求類型。
對(duì)于Custom Runtime或Custom Container,您可以根據(jù)Headers中的參數(shù)來(lái)判斷函數(shù)調(diào)用是HTTP函數(shù)調(diào)用還是事件函數(shù)調(diào)用。參數(shù)信息如下:
  • /invoke:該請(qǐng)求為事件函數(shù)調(diào)用。/invoke表示是Invoke函數(shù)調(diào)用請(qǐng)求。
  • /http-invoke:該請(qǐng)求為HTTP函數(shù)調(diào)用。/http-invoke表示是HTTP invoke函數(shù)調(diào)用請(qǐng)求,函數(shù)計(jì)算會(huì)將您的請(qǐng)求(包括Path、Body和Headers)加上Common Headers后轉(zhuǎn)發(fā)給Custom Runtime或Custom Container,Custom Runtime或Custom Container返回的響應(yīng)頭和響應(yīng)體則會(huì)被返回給客戶端。
  • /initialize/initialize表示第一次創(chuàng)建執(zhí)行環(huán)境時(shí),函數(shù)計(jì)算自動(dòng)發(fā)起的Initialize函數(shù)調(diào)用請(qǐng)求。在容器的生命周期內(nèi),有且僅成功調(diào)用一次,類似于Class構(gòu)造函數(shù)。

函數(shù)計(jì)算響應(yīng)碼和響應(yīng)頭

Custom Runtime本質(zhì)是您實(shí)現(xiàn)的HTTP Server,因此每一次函數(shù)調(diào)用都是一次HTTP請(qǐng)求,即每次響應(yīng)都有響應(yīng)碼和響應(yīng)頭。
  • 響應(yīng)碼StatusCode
    • 200:成功狀態(tài)。
    • 404:失敗狀態(tài)。
  • 響應(yīng)頭x-fc-status
    • 200:成功狀態(tài)。
    • 404:失敗狀態(tài)。
通過(guò)Headers中的x-fc-status響應(yīng),向函數(shù)計(jì)算匯報(bào)本地函數(shù)是否執(zhí)行成功。
  • 不設(shè)置x-fc-status函數(shù)計(jì)算默認(rèn)本次調(diào)用是成功執(zhí)行的,但是您的函數(shù)可能有異常,沒(méi)有向函數(shù)計(jì)算匯報(bào),函數(shù)計(jì)算會(huì)認(rèn)為這次函數(shù)執(zhí)行沒(méi)有報(bào)錯(cuò),在業(yè)務(wù)邏輯上可能沒(méi)有影響,但是在監(jiān)控可觀測(cè)性上會(huì)有影響。如下圖所示:image8hanshujisuanruntime
  • 設(shè)置x-fc-status:當(dāng)您的函數(shù)存在異常,通過(guò)x-fc-status響應(yīng)向函數(shù)計(jì)算匯報(bào)本次函數(shù)執(zhí)行失敗,并將錯(cuò)誤堆棧信息打印到日志中。如下圖所示:image9runtimefc
說(shuō)明 在返回的HTTP響應(yīng)中,建議您同時(shí)設(shè)置StatusCodex-fc-status。

函數(shù)日志格式

建議您在創(chuàng)建服務(wù)時(shí)啟用日志功能,Custom Runtime中所有打印到標(biāo)準(zhǔn)輸出(Stdout)的日志會(huì)自動(dòng)收集到您指定的日志服務(wù)中。具體步驟,請(qǐng)參見(jiàn)配置日志。

函數(shù)計(jì)算在其他運(yùn)行環(huán)境,即除Custom Runtime和Custom Container以外的運(yùn)行環(huán)境中調(diào)用函數(shù)時(shí),如果請(qǐng)求頭中包含x-fc-log-type" = "Tail",那么返回的響應(yīng)頭包含x-fc-log-result的內(nèi)容就是函數(shù)執(zhí)行時(shí)打印的日志,日志上限為4 KB。您可以在函數(shù)計(jì)算控制臺(tái)函數(shù)執(zhí)行結(jié)果中查看該日志。如果您希望在控制臺(tái)的執(zhí)行結(jié)果中看到Custom Runtime的運(yùn)行日志,需要在代碼中記錄請(qǐng)求開(kāi)始和結(jié)束的日志。

日志內(nèi)容 是否必選 代碼
啟動(dòng)Runtime
說(shuō)明 該內(nèi)容為函數(shù)冷啟動(dòng)的標(biāo)志。
FunctionCompute ${runtime} runtime inited.
說(shuō)明 ${runtime}為自定義語(yǔ)言類型,建議您避免使用函數(shù)計(jì)算官方語(yǔ)言名稱,例如Node.js、Python或PHP等。
Invoke開(kāi)始的日志 FC Invoke Start RequestId: ${RequestId}
Invoke結(jié)束的日志 FC Invoke End RequestId: ${RequestId}
Initialize開(kāi)始的日志
說(shuō)明 如果是Initializer函數(shù),則需要記錄。
FC Initialize Start RequestId: ${RequestId}
Initialize結(jié)束的日志
說(shuō)明 如果是Initializer函數(shù),則需要記錄。
FC Initialize End RequestId: ${RequestId}

除了以上特殊的信息外,推薦您在自己的日志中包含請(qǐng)求ID,方便日后診斷問(wèn)題。推薦日志格式為$utcdatetime(yyyy-MM-ddTHH:mm:ss.fff) $requestId [$Level] $message

說(shuō)明 不同語(yǔ)言下指定日志級(jí)別的接口不同,請(qǐng)您根據(jù)實(shí)際運(yùn)行環(huán)境設(shè)置。更多信息,請(qǐng)參見(jiàn)基礎(chǔ)信息。

相關(guān)文檔