本文介绍Custom Runtime的公共请求头、响应码和响应头以及日志格式,您可以参见这些信息打造属于您的自定义运行环境。

函数计算公共请求头

Custom Runtime从函数计算中接收到的公共请求头如下表所示。如果您需要访问阿里云其他服务,您可能需要用到临时AccessKey的Headers。如果您需要迁移已有的应用,可忽略下文的内容。

说明
  • 事件函数和HTTP函数均包含Common Headers。
  • 公共请求头是函数计算自动生成的,主要包含权限信息和函数的基本信息等。
Header 描述
x-fc-request-id Request ID。
x-fc-access-key-id 临时AccessKey ID。
x-fc-access-key-secret 临时AccessKey Secret。
x-fc-security-token 临时Security Token。
x-fc-function-handler 函数的Handler,如果Runtime本身就是函数(例如Custom Runtime或者Custom Container函数),则该值无意义,设置为一个随机字符串即可。
x-fc-function-memory 函数最大能使用的内存。
x-fc-function-initializer Initializer函数的Handler,如果Runtime本身就是函数(例如Custom Runtime或者Custom Container函数),则该值无意义,设置为一个随机字符串即可。
x-fc-initialization-timeout Initializer函数执行的超时时间。
x-fc-instance-lifecycle-pre-stop-handler PreStop函数的Handler,如果Runtime本身就是函数(例如Custom Runtime或者Custom Container函数),则该值无意义,设置为一个随机字符串即可。
x-fc-instance-lifecycle-pre-freeze-handler PreFreeze函数的Handler,如果Runtime本身就是函数(例如Custom Runtime或者Custom Container函数),则该值无意义,设置为一个随机字符串即可。
x-fc-region 函数所在的地域。
x-fc-account-id 函数所有者的UID。
x-fc-qualifier 函数调用时指定的服务版本或别名。更多信息,请参见灰度发布示例
x-fc-version-id 函数调用时指定的服务版本。
x-fc-function-name 函数名称。
x-fc-service-name 函数所在的服务的名字。
x-fc-service-logproject 函数所在服务配置的日志项目。
x-fc-service-logstore 函数所在服务配置的日志库。
x-fc-control-path 函数的请求类型。
对于Custom Runtime或Custom Container,您可以根据Headers中的参数来判断函数调用是HTTP函数调用还是事件函数调用。参数信息如下:
  • /invoke:该请求为事件函数调用。/invoke表示是Invoke函数调用请求。
  • /http-invoke:该请求为HTTP函数调用。/http-invoke表示是HTTP invoke函数调用请求,函数计算会将您的请求(包括Path、Body和Headers)加上Common Headers后转发给Custom Runtime或Custom Container,Custom Runtime或Custom Container返回的响应头和响应体则会被返回给客户端。
  • /initialize/initialize表示第一次创建执行环境时,函数计算自动发起的Initialize函数调用请求。在容器的生命周期内,有且仅成功调用一次,类似于Class构造函数。

函数计算响应码和响应头

Custom Runtime本质是您实现的HTTP Server,因此每一次函数调用都是一次HTTP请求,即每次响应都有响应码和响应头。
  • 响应码StatusCode
    • 200:成功状态。
    • 404:失败状态。
  • 响应头x-fc-status
    • 200:成功状态。
    • 404:失败状态。
通过Headers中的x-fc-status响应,向函数计算汇报本地函数是否执行成功。
  • 不设置x-fc-status函数计算默认本次调用是成功执行的,但是您的函数可能有异常,没有向函数计算汇报,函数计算会认为这次函数执行没有报错,在业务逻辑上可能没有影响,但是在监控可观测性上会有影响。如下图所示:image8hanshujisuanruntime
  • 设置x-fc-status:当您的函数存在异常,通过x-fc-status响应向函数计算汇报本次函数执行失败,并将错误堆栈信息打印到日志中。如下图所示:image9runtimefc
说明 在返回的HTTP响应中,建议您同时设置StatusCodex-fc-status

函数日志格式

建议您在创建服务时启用日志功能,Custom Runtime中所有打印到标准输出(Stdout)的日志会自动收集到您指定的日志服务中。具体步骤,请参见配置日志

函数计算在其他运行环境,即除Custom Runtime和Custom Container以外的运行环境中调用函数时,如果请求头中包含x-fc-log-type" = "Tail",那么返回的响应头包含x-fc-log-result的内容就是函数执行时打印的日志,日志上限为4 KB。您可以在函数计算控制台函数执行结果中查看该日志。如果您希望在控制台的执行结果中看到Custom Runtime的运行日志,需要在代码中记录请求开始和结束的日志。

日志内容 是否必选 代码
启动Runtime
说明 该内容为函数冷启动的标志。
FunctionCompute ${runtime} runtime inited.
说明 ${runtime}为自定义语言类型,建议您避免使用函数计算官方语言名称,例如Node.js、Python或PHP等。
Invoke开始的日志 FC Invoke Start RequestId: ${RequestId}
Invoke结束的日志 FC Invoke End RequestId: ${RequestId}
Initialize开始的日志
说明 如果是Initializer函数,则需要记录。
FC Initialize Start RequestId: ${RequestId}
Initialize结束的日志
说明 如果是Initializer函数,则需要记录。
FC Initialize End RequestId: ${RequestId}

除了以上特殊的信息外,推荐您在自己的日志中包含请求ID,方便日后诊断问题。推荐日志格式为$utcdatetime(yyyy-MM-ddTHH:mm:ss.fff) $requestId [$Level] $message

说明 不同语言下指定日志级别的接口不同,请您根据实际运行环境设置。更多信息,请参见基础信息

相关文档