使用 AWS Lambda Layers 时,我应该更喜欢多层还是具有所有依赖项的单层?
When using AWS Lambda Layers shall I prefer multiple layers or a single layer with all the dependencies?
我们在 Node.js (v10.x) 中有几个 AWS Lambdas,其中一些有一些 "specific big" 依赖项,这些依赖项并非在所有这些项之间共享。例如,我们有一个 "Authorizer" 函数依赖于 firebase-admin
NPM 包,这是唯一使用它的 Lambda。
为了更易于维护,目前我们有一个包含所有依赖项的层。将依赖项拆分为多个层有什么好处吗?我的假设是更大的层会增加 "cold start" 时间。然而,与层的大小相关的惩罚有多大?我在 AWS 文档中找不到关于此的任何参考。
类似的问题,但跨不同的语言。如果我们为 Lambda 使用多种语言(例如 Node 和 Python),我可以拥有一个包含两种语言依赖项的 Lambda 层吗?我想这是一个更简单的选择,因为 Python 依赖项实际上 永远不会 被 Node.js 代码使用。但是,我想阅读一些 AWS 推荐的管理层的最佳实践。
解压所有层的 Lambda 应小于 250 MB,如果您接近此大小,请考虑拆分层并仅使用您需要的层。
您可以在一层中混合不同语言的依赖项,因为它只是您可以在 Lambda 运行时中重复使用的文件。正如您所说,它会增加冷启动,并且每个使用公共层的功能都会独立下载该层。因此,如果您更容易在一层中维护所有内容,请保持原样,但是,一般来说,加载您不打算使用的代码不是一个好习惯。
另一方面,每个函数最多只能有 5 层,因此将公共代码和依赖项拆分成小层后,您可能很快就会达到这个限制。
我们在 Node.js (v10.x) 中有几个 AWS Lambdas,其中一些有一些 "specific big" 依赖项,这些依赖项并非在所有这些项之间共享。例如,我们有一个 "Authorizer" 函数依赖于 firebase-admin
NPM 包,这是唯一使用它的 Lambda。
为了更易于维护,目前我们有一个包含所有依赖项的层。将依赖项拆分为多个层有什么好处吗?我的假设是更大的层会增加 "cold start" 时间。然而,与层的大小相关的惩罚有多大?我在 AWS 文档中找不到关于此的任何参考。
类似的问题,但跨不同的语言。如果我们为 Lambda 使用多种语言(例如 Node 和 Python),我可以拥有一个包含两种语言依赖项的 Lambda 层吗?我想这是一个更简单的选择,因为 Python 依赖项实际上 永远不会 被 Node.js 代码使用。但是,我想阅读一些 AWS 推荐的管理层的最佳实践。
解压所有层的 Lambda 应小于 250 MB,如果您接近此大小,请考虑拆分层并仅使用您需要的层。
您可以在一层中混合不同语言的依赖项,因为它只是您可以在 Lambda 运行时中重复使用的文件。正如您所说,它会增加冷启动,并且每个使用公共层的功能都会独立下载该层。因此,如果您更容易在一层中维护所有内容,请保持原样,但是,一般来说,加载您不打算使用的代码不是一个好习惯。
另一方面,每个函数最多只能有 5 层,因此将公共代码和依赖项拆分成小层后,您可能很快就会达到这个限制。