Node.js AWS Lambda Layers可以运行代码吗



我正在读关于Lambda层的文章——到目前为止,我对层的理解是,它是一个额外文件的ZIP存档,AWS将把这些文件转储到Lambda函数的/opt文件夹中,这样该函数就可以包括分布在ZIP存档中的额外模块/库等。

这就是一层吗?或者可以创建一个层,在Lambda函数执行之前运行代码吗?

您关于Lambda Layers的结论是正确的!

在函数中包括一个或多个层时,在初始化期间,按照函数执行环境中的/opt目录的顺序提取每个层的内容。然后,每个运行时根据语言在/opt下的不同位置查找库。每个函数最多可以包含五层,这将计入250 MB的解压缩部署包大小限制。层被自动设置为私有,但它们可以与其他AWS帐户共享,也可以公开共享。

或者是否可以创建一个层,在Lambda函数执行之前运行代码?

您正在寻找的东西可以通过Lambda扩展实现:

https://docs.aws.amazon.com/lambda/latest/dg/using-extensions.html

https://aws.amazon.com/blogs/compute/introducing-aws-lambda-extensions-in-preview/

扩展可以在两种模式中运行——内部外部

  • 内部扩展:作为运行时进程的一部分运行,与代码一起处理。它们允许您使用特定于语言的环境变量和包装脚本来修改运行时进程的启动。内部扩展支持诸如自动检测代码之类的用例。

  • 外部扩展:允许您从运行时运行单独的进程,但仍在与Lambda函数相同的执行环境中。外部扩展可以在运行时进程之前启动,也可以在运行库关闭后继续。外部扩展支持一些用例,例如在调用之前获取机密,或者在函数调用之外将遥测发送到自定义目的地。这些扩展作为Lambda函数的伴随进程运行。

您可以使用Lambda扩展来增强Lambda函数。例如,使用Lambda扩展将功能与您喜欢的监控、可观察性、安全性和治理工具集成。

Lambda执行环境的生命周期将按照以下方式工作:

  • Init:在此阶段,Lambda使用配置的资源创建或解冻执行环境,下载函数和所有层的代码,初始化任何扩展,初始化运行时,然后运行函数的初始化代码(主处理程序外的代码(。Init阶段要么发生在第一次调用期间,要么发生在函数调用之前(如果您启用了供应的并发性(

Init阶段分为三个子阶段:

  • 扩展初始化
  • 运行时初始化
  • 函数初始化

这些子阶段确保所有扩展和运行时在函数代码运行之前完成其设置任务。

  • 调用:在此阶段,Lambda调用函数处理程序。在函数运行完成后,Lambda准备处理另一个函数调用。

  • 关闭:如果Lambda函数在一段时间内没有收到任何调用,则会触发此阶段。在关闭阶段,Lambda关闭运行时,提醒扩展让它们干净地停止,然后删除环境。Lambda向每个扩展发送一个Shutdown事件,该事件告诉扩展环境即将关闭。

相关内容

最新更新