And*_*niy 5 amazon-s3 amazon-web-services node.js aws-lambda aws-sdk-nodejs
我的目标是创建一个较大的压缩文本文件并将其放入S3。
文件内容由我从另一个源中循环读取的块组成。
由于该文件的大小,我无法在内存中保存所有数据,因此我需要以某种方式直接将其同时流式传输到S3和ZIP。
我了解如何使用fsNode.JS中的常规代码执行此技巧,但是我对于使用AWS Lambda的S3是否可以执行相同的技巧感到困惑?我知道s3.putObject 可以消耗 streamObject,但是在我看来,执行putObject操作时该流应该已经完成,这可能导致超出允许的内存。
您可以使用NodeJs aws-sdk中的分段上传功能将文件(> 5mb)分批流式传输到S3存储桶中。
这不仅有助于将大文件流式传输到存储桶,而且还使您能够重试失败的块(而不是整个文件)并并行化上传单个块(具有多个上载lambda),这对于以下情况的无服务器ETL设置很有用:例)。只要您跟踪它们并在全部上载后完成该过程,它们的到达顺序并不重要。
要使用分段上传,您应该:
createMultipartUpload并存储返回的UploadId(块上传需要使用它)uploadPart用于将其推送到S3(在UploadId在步骤1中返回)ETags和PartNumbers块上传的数据ETags并使用以下PartNumbers命令在S3上汇编/完成文件completeMultipartUpload这是一个工作代码示例的要点,该示例从iso.org流式传输文件,将其通过gzip 传输到S3存储桶中。不要忘记更改存储桶名称,并确保在节点6.10上运行具有512mb内存的lambda。由于没有外部依赖性,因此可以直接在Web GUI中使用代码。
注意:这只是我为演示目的而汇总的概念证明。没有失败块重试的重试逻辑,错误处理几乎不存在,这可能会导致您付出代价(例如,abortMultipartUpload在取消整个过程以清理上载的块时,应调用它,因为它们在S3上仍保持存储且不可见,即使最终文件从未组装过)。输入流正在暂停,而不是排队上传作业并利用背压流机制等。
| 归档时间: |
|
| 查看次数: |
1783 次 |
| 最近记录: |