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

Can a Node.js AWS Lambda Layers Run Code?

我正在阅读 about Lambda layers -- 到目前为止,我对层的理解是它是一个额外文件的 ZIP 存档,AWS 会将这些文件转储到您的 Lambda 函数的 /opt 文件夹中,以便该函数将能够包含在 ZIP 存档中分发的额外 modules/libraries/etc。

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

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

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

Or is it possible to create a layer that will run code prior to the the Lambda function's execution?

您想要的可以通过 Lambda Extensions 实现:

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

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

扩展可以运行两种模式中的任何一种——内部外部

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

  • 外部扩展: 允许您 运行 将进程与 运行 时间分开,但仍处于与拉姆达函数。外部扩展可以在 运行time 进程之前启动,并且可以在 运行time 关闭之后继续。外部扩展支持用例,例如在调用之前获取机密,或将遥测数据发送到函数调用之外的自定义目标。这些扩展 运行 作为 Lambda 函数的伴随进程。

You can use Lambda extensions to augment your Lambda functions. For example, use Lambda extensions to integrate functions with your preferred monitoring, observability, security, and governance tools.

Lambda 执行环境的生命周期为:

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

初始阶段分为三个子阶段:

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

这些子阶段确保所有扩展和 运行 时间在功能代码 运行s 之前完成它们的设置任务。

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

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