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)?