AWS Lambda with Node - 将文件保存到 Lambda 的文件系统中

Posted

技术标签:

【中文标题】AWS Lambda with Node - 将文件保存到 Lambda 的文件系统中【英文标题】:AWS Lambda with Node - saving files into Lambda's file system 【发布时间】:2021-11-27 18:10:07 【问题描述】:

我需要将从 S3 获取的文件保存到 Lambda 的文件系统中,我想知道我是否可以简单地使用 fs.writeFileSync 来做到这一点?

或者我是否还必须使用此处所述的context 函数: How to Write and Read files to Lambda-AWS with Node.js

(试图找到更新的示例,但找不到)。

推荐的方法是什么?

请指教。

【问题讨论】:

不确定“上下文函数”是什么意思。是的,您可以使用典型的 fs 函数,但写入仅限于 /tmp,并且该位置的 Lambda 函数可用的最大磁盘空间为 512 MB。在那里写入的文件可能会持续到下一次(热)Lambda 调用。 如果只是从 S3 复制到本地磁盘然后流式传输内容 (example)。 如果我蒸汽内容,我有什么磁盘空间限制? 您最多可以在 /tmp 中写入 512MB。根据您的应用程序,您可能能够通过流处理 RAM 中的整个 S3 对象,而无需持久化到磁盘。 请发表您的评论作为答案,以便我接受。 【参考方案1】:

Lambda 不允许访问本地文件系统。这是一个短暂的环境。它们允许访问/tmp 文件夹,但最多只能访问 512MB。如果您想在函数中使用存储,则需要实施 AWS S3 或 AWS EFS。

Here's an article from AWS explaining this.

Here's the docs on adding storage to Lambda.

【讨论】:

AWS Lambda 确实允许访问本地文件系统。有效的(沙盒)用户可能不一定有足够的权限来访问整个文件系统,但它当然可以访问所有可读的文件,例如在 /etc. @jarmod 这是一个很好的区别,谢谢 不确定我是否理解,我可以指示 lambda 使用 S3 存储桶作为其存储空间吗?【参考方案2】:

是的,您可以使用典型的 fs 函数从本地磁盘读取/写入,但请注意,写入仅限于 /tmp 目录,并且该位置的 Lambda 函数可用的最大磁盘空间为 512 MB。另请注意,在那里写入的文件可能会持续到下一次(热)Lambda 调用。

如果您只想将对象从 S3 下载到本地磁盘(假设它适合可用的磁盘空间),那么您可以将 AWS SDK 方法和 Node.js 流式传输到stream the content to disk。

另外,值得注意的是,根据您的应用程序,您可能能够通过流处理 RAM 中的整个 S3 对象,而无需实际保存到磁盘。如果您的对象大小超过 512MB,这将很有帮助。

如果您需要保留非常大的文件,请考虑使用Elastic File System。

【讨论】:

以上是关于AWS Lambda with Node - 将文件保存到 Lambda 的文件系统中的主要内容,如果未能解决你的问题,请参考以下文章

AWS lambda and dynamodb with Java

AWS lambda and dynamodb with Java

AWS lambda 调用不调用另一个 lambda 函数 - Node.js

AWS Lambda 函数总是返回 null (Node/Javascript)?

使用 Node.JS 调用 AWS 胶水的 lambda 函数不使用 console.log 的原因是啥?

如何检查 AWS Lambda 和 Elasticbeanstalk 中的次要 Node.js 版本?