繁体   English   中英

在 AWS Lambda 的 S3 存储桶上存储节点模块

[英]Storing node module on S3 bucket for AWS Lambda

我开发了一个基于 nodejs 的函数/程序,并希望在 AWS Lambda 上运行它。 问题是大小大于 50MB,AWS Lambda 支持直接 function 代码小于 50MB。

主要在我的代码上,节点模块为 43MB,实际代码约为 7MB。 那么有什么方法可以将我的节点模块与代码分开,也许我们可以将节点模块存储在 S3 存储桶中,然后在 AWS Lambda 上访问它? 任何的意见都将会有帮助。 谢谢

PS:由于一些依赖问题,我无法将此 function 作为 Lambda 上的 Docker 图像运行。

如果您不想或不能使用 Docker 打包,您可以 zip 将您的 node_modules 放入 S3 存储桶中。

然后,您的handler (或包含您的处理程序的模块)可以下载 zip 存档并将文件提取到/tmp 然后,您从那里require()您的模块。

上述描述并非 100% 准确,因为有很多方法可以做到这一点。 但这是一般的想法。

这是zappa的一种部署方法,一种用于将 Python/Django 应用程序部署到 AWS Lambda 的工具,早在 Lambda 中允许 docker 容器之前就已经支持。

https://github.com/Miserlou/Zappa/pull/548

您可以使用非常适合您的用例的lambda 层 Sometime ago, we need to use facebook sdk for one of our project and we created a lambda layer for the facebook sdk(32 mb) and then the deployment package became only 4 KB.

它被表述为

使用层可以更快地使用 AWS 无服务器应用程序 Model (AWS SAM) 或无服务器框架部署应用程序。 通过将运行时依赖项从 function 代码移动到层,这有助于reduce the overall size of the archive

单个 Lambda function 最多可以使用five layers 总解压缩 function 和所有层的最大大小为250 MB ,这远远超出了您的限制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM