Lambda执行环境

Lambda函数是在execution environment(执行环境)中运行的,为代码提供了隔离性。当创建Lambda时,需要设置内存大小及超时时间,Lambda使用这些信息来配置Execution Environment

image-20220403195740398

Execution Environment中的内部组件(Extensions, Runtime, Logs)与Lambda服务通过各种API进行交互:

       Architecture diagram of the execution environment.

Lambda execution environment 生命周期

Execution environment 包括以下阶段:

Init:

  • 在这个阶段,Lambda创建execution environment ,包括初始化各种插件、运行时执行handler之外的代码

  • Init阶段在第一次调用函数时发生(如果开启了provisioned concurrency,则在第一次调用之前就会进行)。

  • Init阶段可以分为三个子阶段: Extension init, Runtime initFunction init,保证ExtensionRuntime加载完成后,再加载函数的代码。

Invoke

在这个阶段,Lambda调用handler方法。我们为Lambda设置的超时时间就应用在这个阶段。

在执行完成后,Lambda先保存execution environment, 等待下一次调用,这样有几个优点:

  1. 不用重新进行Init阶段,例如重新初始化数据库连接;
  2. /tmp下的文件依然存在,可以给后续的函数调用复用该目录,建议在代码中加入check该目录下文件的逻辑

Shutdown

如果Lambda在一段时间内没有新的调用,则触发此阶段,关掉运行时、清理Extension环境


不同的Lambda执行次数不同,所以生命周期中Invoke阶段数量也有差异:

image-20220403211408808

在开发Lambda代码时,不要假定你的代码一定会复用Execution environment!。要使用判断逻辑,因为代码也有可能在新的Execution environment里运行。