首页 > 解决方案 > AWS Lambda 层可以在没有函数/处理程序调用层的情况下拦截 Lambda 函数处理程序吗?

问题描述

我正在研究 AWS Lambda 层的功能,并试图确认该层是否可以在 Lambda 函数不具备任何知识/与该层交互的情况下添加行为。

我对文档的理解是,Layers 实际上是一个解压缩到 Lambda 实例的 .zip 文件,主要用于交付资源,而不需要直接使用 Lambda 函数/处理程序打包这些资源。例如,使用 Layers 部署运行时(可执行文件)或共享资源(例如二进制依赖项)是有据可查的——在这两种情况下,Function 本身都会调用或引用 Layer 内容。

我的问题是一个完全独立的层是否可以向/围绕 Lambda 函数添​​加行为。例如,假设我想要一个简单地呼应“Hello World”的新层——是否可以将一个层部署到现有函数,而函数没有对该层的任何引用?

标签: amazon-web-servicesaws-lambdaaws-lambda-layers

解决方案


查看Lambda API 扩展。这些提供了一种方法来执行您所描述的操作,并且它们被部署为层,但它是扩展方面,它允许与典型层中的依赖代码进行不同的交互。另请参阅https://aws.amazon.com/blogs/compute/introducing-aws-lambda-extensions-in-preview/

在此处输入图像描述

不是扩展的层本质上不是这样工作的。这是一个常见的编码概念,尤其是在 Web 设置中,具有一个模块管道,这些模块可以在传入请求上进行交互,并且可以修改请求甚至在它到达核心代码之前终止它,但这不是层通常的运作方式.

相反,层用于核心代码中的运行时依赖项。它们之所以起作用,是因为核心代码中的某些内容导入/引用了它们。没有这样的引用,代码就坐在那里并且未被使用。

名称“层”可能会给人一种错误的印象,即这些是包装核心代码的代码模块,或者流程在到达您的代码 lambda 函数代码之前通过这些层,但实际上是扩展方面赋予了它们能力你问一下。

AWS Lambda 执行环境提供了有用的视觉效果 :在此处输入图像描述

另见


推荐阅读