本文介绍使用函数计算编写代码相关的基础概念信息,包括请求处理程序、函数实例生命周期回调方法、日志记录和错误处理等。
请求处理程序
在创建函数时,您需要指定请求处理程序。函数计算的运行时会加载并调用您的请求处理程序处理请求。
对于内置运行时,请求处理程序只有一种格式,您可以使用请求处理程序处理各种事件源的事件请求,例如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架构。