5

我们在 Node.js (v10.x) 中有几个 AWS Lambda,其中一些具有一些“特定的大”依赖项,这些依赖项并非在所有它们之间共享。例如,我们有一个依赖于firebase-adminNPM 包的“Authorizer”函数,这是唯一使用它的 Lambda。

为了使其更易于维护,目前我们有一个包含所有依赖项的层。将依赖项拆分为多个层有什么好处吗?我的假设是更大的层会增加“冷启动”时间。但是,相对于层的大小,这个惩罚有多大?我在 AWS 文档中找不到任何关于此的参考。

类似的问题,但跨越不同的语言。如果我们对 Lambda 使用多种语言(例如 Node 和 Python),我可以拥有一个包含两种语言依赖项的 Lambda 层吗?我想这是一个更简单的选择,因为Node.js 代码实际上永远不会使用 Python 依赖项。但是,我想阅读一些 AWS 推荐的管理层的最佳实践。

4

1 回答 1

6

一个未打包所有层的 Lambda 应小于 250 MB,如果您接近此大小,请考虑拆分层并仅使用您需要的层。

您可以在一层中混合不同语言的依赖项,因为它只是您可以在 Lambda 运行时中重复使用的文件。正如您所说,它将增加冷启动,并且使用公共层的每个功能将独立下载该层。因此,如果您更容易在一层中维护所有内容,请保持原样,但是,一般来说,加载您不打算使用的代码并不是一个好习惯。

另一方面,每个函数最多只能有 5 层,因此将公共代码和依赖项拆分为小层,您可能很快就会达到此限制。

于 2020-02-25T17:11:41.667 回答