上传 ZIP 文件到 S3,使用 EC2 解压

Posted

技术标签:

【中文标题】上传 ZIP 文件到 S3,使用 EC2 解压【英文标题】:Uploading ZIP file to S3, use EC2 to Unzip 【发布时间】:2012-03-31 22:27:28 【问题描述】:

我有一个 Codeigniter Web 应用程序,它每小时都会将许多小文件上传到 Amazon S3,这导致我的 S3 请求费用迅速飙升。解决这个问题的一种方法是压缩文件,将压缩文件上传到 S3,然后在 S3 上解压缩。

这可以使用 EC2 完成吗?还是有更好的方法来实现这一目标?谢谢!!

编辑:如果我要使用 EC2,我是否使用 php 来触发 EC2 实例的创建,上传解压缩压缩文件所需的 PHP 文件,将解压缩文件复制到 S3,然后销毁 EC2 实例?

【问题讨论】:

你不能在 S3 上存储压缩文件吗? 我希望各个解压缩文件在 S3 上可用。压缩它的原因(100 个小文件到 1 个 zip 文件中)是为了减少 PUT 请求的数量,这显着增加了 S3 的使用成本。 @Daan 我在forums.aws.amazon.com/message.jspa?messageID=243519 进行了检查,看来从 EC2 到 S3 的 COPY 请求是免费的。谁能证实这一点? 我认为他们讨论的是数据传输费用。您需要为您提出的实际请求数量单独收费,我认为这些请求即使来自 EC2 也不是免费的 :) 有人可以确认吗? 【参考方案1】:

您可以在 lambda 中编写代码来解压缩 S3 存储桶的文件,您只需使用它,AWS Lambda 将为您完成。

参考:

    https://github.com/carloscarcamo/aws-lambda-unzip-py/blob/master/unzip.py https://github.com/mehmetboraezer/aws-lambda-unzip

【讨论】:

我喜欢你的两个参考,但我不知道如何调和指向外部资源的链接不被视为有效的 SO 答案这一事实。虽然您可以包含 py 文件的内容(即使您没有在第二个引用中直接链接到它,但两者都是单个 py 文件),但“感觉”并不完全正确。但如果引用得当,我想它只是将脚本存档以供后代使用。【参考方案2】:

我一直在使用此服务解压缩包含数千个小图像文件的文件,我上传的每个 zip 文件大约 4GB,使用http://www.cloudzipinc.com/service/s3_unzip 解压缩的成本约为 1 美元,也许这可能对某人有所帮助。

话虽如此,您可能会发现将 Python 与 Boto 库一起使用会更容易。这将比 PHP 更有效。

【讨论】:

【参考方案3】:

如果您在同一地区有一台 EC2 机器,我建议您将其上传到那里,然后将其解压缩到 s3。 S3 无法自行解压缩,因为它完全是静态的。

ec2 和 s3 之间不收取任何费用,因此 ec2 可以处理解压缩,然后将其写入您的 s3 存储桶,而无需额外的传输费用。

【讨论】:

带宽是免费的,但您需要为 PUT 付费(目前每 1,000 个请求 0.005 美元)。如果您有一个包含 10,000 个小文件的 zip 文件,则上传会花费一些费用,更重要的是,它需要一段时间。 亲爱的@Akshat,如果有的话,请分享链接或代码以将文件夹(刚刚解压缩)从 EC2 写入 S3,不胜感激 没有必要为这么简单的事情使用 ec2。使用 Lambda。 Aman Garg 链接到的项目可以轻松修改为从 S3 中提取文件,而不是作为上传接收文件。 github.com/mehmetboraezer/aws-lambda-unzip @BrunoBronosky lambda 函数每次执行最多运行 15 分钟。如果 zip 很大,它将失败。 lambda 也有有限的空间(atm 512Mb at /tmp),除非磁盘附加了额外的空间。所以这是另一个没有额外配置的硬限制。【参考方案4】:

S3 只是存储。您上传的任何文件都是存储的文件。您无法上传 zip 文件,然后在 S3 中将其解压缩。如果您编写了应用程序,我能说的最好的事情就是尝试重新设计您存储文件的方式。 S3 请求非常便宜……您一定发出了很多请求。

【讨论】:

您可以在上传时触发一个 lambda 函数作业,将其解压缩到指定的存储桶。

以上是关于上传 ZIP 文件到 S3,使用 EC2 解压的主要内容,如果未能解决你的问题,请参考以下文章

springboot zip文件上传无法解压

java 解压 zip 包并删除

Java 上传解压zip文件,并且解析文件里面的excel和图片

本地上传文件至服务器的技巧(linux文件压缩及解压文件)

java如何解压页面上传到服务器的zip文件

突破PHP免费空间文件格式上传限制-FTP传zip,PHP解压zip文件 - 比单文件管理器更好用