【问题标题】:How to process large zip file using AWS lambda?如何使用 AWS lambda 处理大型 zip 文件?
【发布时间】:2021-03-07 12:56:27
【问题描述】:

我想从 s3 读取 100K+ 文件并将它们压缩成单个大文件。单个文件的大小可以在几 Kb 到 1MB 之间,最终的 zip 文件可以轻松超过 3GB。 鉴于 AWS Lambda 的内存限制为 3GB,tmp 目录存储为 512MB。您将如何使用 AWS lambda 来做到这一点?我正在使用 .Net Core 3

当 zip 大小超过 3Gb 时,下面的代码将失败

    var zipStream = new MemoryStream();
    using (System.IO.Compression.ZipArchive zip = new ZipArchive(zipStream, ZipArchiveMode.Create, true))
    {
        for(int i =0;i<sourceFils.Count;i++)
        {
            
            var zipItem = zip.CreateEntry("file"+i.ToString()+".pdf");

            using (var entryStream = zipItem.Open())
            {
                var source  = GetFileFromS3(sourceFiles[i]);
                await source.CopyToAsync(entryStream);
            }
        }
    }

     //upload zip file to S3. For brevity Upload code is not included.
    _s3Client.Upload(zipStream); 

我见过的大多数用于处理大文件的示例都使用 Node JS,并且也不超过 3GB。我正在寻找 C# .Net Core 示例。此外,我试图避免将 zip 拆分为多个小于 3GB 的 zip 文件

1>在不拆分 zip 文件的情况下,您将如何使用 AWS Lambda 执行此操作? 2>是否有可以直接从 S3 读取/写入的 S3 Stream?

【问题讨论】:

  • 如果你的总存储空间为 3GB (RAM) + 0.5GB (disk),你显然不能超过 3.5GB(而且可能会小于这个)。您需要更多空间 -> AWS lambda 不适合此任务
  • 您可以在内存不足时使用交换空间,这将使用临时文件代替内存。它运行速度较慢,但​​会解决问题。请参阅:reddit.com/r/aws/comments/b2zijf/…
  • @jdweng 我认为这仅适用于 EC2 实例,不适用于无服务器 lambda。不过我可能是错的。
  • @LP13 :如果机器有文件系统(智能卡),那么它是适用的。与无服务器无关。
  • Lambda 是事件驱动的。如果您这样做一次,那么启动具有合理磁盘空间量的 EC2、运行程序并摆脱 EC2 将是最简单的。如果您需要经常执行此操作,则使用正确的“材料”创建一个 EC2 AMI,并使用它来创建一个临时 EC2 并根据需要运行它。

标签: c# amazon-s3 .net-core aws-lambda aws-sdk-net


【解决方案1】:

从今天(2020 年 12 月 1 日)开始,您最多可以分配 10 GB 的内存。对于您的目的来说,这可能已经足够了,至少现在是这样。 https://aws.amazon.com/blogs/aws/new-for-aws-lambda-functions-with-up-to-10-gb-of-memory-and-6-vcpus/

如果您可以调整您的代码以避免将其全部存储在内存中,那么另一个选择可能是使用 Amazon EFS 进行存储。对 Lambda 的 EFS 支持于今年早些时候推出。 https://aws.amazon.com/blogs/compute/using-amazon-efs-for-aws-lambda-in-your-serverless-applications/

【讨论】:

    猜你喜欢
    • 2020-05-14
    • 2020-08-18
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    • 2017-05-11
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    相关资源
    最近更新 更多