如何从S3中解压缩ZIP文件,重新压缩它们,然后将它们移动到S3存储桶中(&;)? [英] How can I decompress ZIP files from S3, recompress them & then move them to an S3 bucket?
问题描述
我有一个S3存储桶,里面有一堆zip文件。我想要解压缩zip文件,并且对于每个解压缩的项目,我想创建一个$file.gz
并将其保存到另一个S3存储桶中。我在考虑为它做一个胶水工作,但我不知道怎么开始。有线索吗?
最终,我希望实现我的解决方案,只要S3存储桶中有新文件,就应该触发它
是Lambda函数还是任何其他服务更适合于此?
推荐答案
从体系结构的角度来看,这取决于压缩文件的文件大小-如果该过程花费的时间少于15分钟,则可以使用lambda函数。
如果更多,您将达到当前的15分钟Lambda timeout,因此您需要使用不同的解决方案。
但是,对于您在新文件上触发的用例,S3 triggers将允许您在存储桶中创建/删除文件时触发Lambda函数。
我建议将ZIP文件分离到它们自己的存储桶中,否则您还需要支付检查费用,以查看上传的任何文件是否在您特定的";文件夹";中,因为Lambda将在整个存储桶中触发(可以忽略,但仍然值得指出)。如果隔离,您将知道上载的任何文件都是ZIP文件。
然后,您的Lambda可以使用download_file
(example provided by Boto3 documentation)从S3下载文件,使用zipfile
解压该文件,并最终使用gzip
GZIP压缩该文件。
然后可以使用upload_object
(example provided by Boto3 documentation)&;将输出文件上传到新存储桶,然后使用delete_object
从原始存储桶中删除原始文件。
格式化以上内容也应该相对简单,因为您将主要使用aws_lambda_function
&;aws_s3_bucket
资源。
确保您的Lambda具有正确的execution role和适当的IAM策略来访问两个S3存储桶&您应该可以开始使用了。
这篇关于如何从S3中解压缩ZIP文件,重新压缩它们,然后将它们移动到S3存储桶中(&;)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!