Lambda函数是在execution environment(执行环境)
中运行的,为代码提供了隔离性。当创建Lambda时,需要设置内存大小及超时时间,Lambda使用这些信息来配置Execution Environment
:
Execution Environment
中的内部组件(Extensions, Runtime, Logs)与Lambda服务通过各种API进行交互:
Execution environment
包括以下阶段:
Init
:在这个阶段,Lambda创建execution environment
,包括初始化各种插件、运行时
、执行handler之外的代码。
Init阶段在第一次调用函数时发生(如果开启了provisioned concurrency
,则在第一次调用之前就会进行)。
Init
阶段可以分为三个子阶段: Extension init
, Runtime init
和 Function init
,保证Extension
和Runtime
加载完成后,再加载函数的代码。
Invoke
:在这个阶段,Lambda调用handler方法。我们为Lambda设置的超时时间就应用在这个阶段。
在执行完成后,Lambda先保存execution environment
, 等待下一次调用,这样有几个优点:
Init
阶段,例如重新初始化数据库连接;/tmp
下的文件依然存在,可以给后续的函数调用复用该目录,建议在代码中加入check该目录下文件的逻辑Shutdown
:如果Lambda在一段时间内没有新的调用,则触发此阶段,关掉运行时、清理Extension环境
不同的Lambda执行次数不同,所以生命周期中Invoke阶段数量也有差异:
在开发Lambda代码时,不要假定你的代码一定会复用Execution environment
!。要使用判断逻辑,因为代码也有可能在新的Execution environment里运行。