如何从 S3 解压 ZIP 文件,解压它们,然后将它们移动到 S3 存储桶?

How can I decompress ZIP files from S3, recompress them & then move them to an S3 bucket?

我有一个包含一堆 zip 文件的 S3 存储桶。我想解压缩 zip 文件,对于每个解压缩的项目,我想创建一个 $file.gz 并将其保存到另一个 S3 存储桶。我正在考虑为它创建一个 Glue 作业,但我不知道如何开始。有线索吗?

最后,我想改造我的解决方案,只要 S3 存储桶中有新文件,它就会被触发,

Lambda 函数或任何其他服务是否更适合此?

从架构的角度来看,这取决于您的 ZIP 文件的文件大小 - 如果该过程花费的时间少于 15 分钟,那么您可以使用 Lambda 函数。

如果更多,您将到达当前的 15 分钟Lambda timeout,因此您需要继续使用不同的解决方案。

但是,对于触发新文件的用例,S3 triggers 将允许您在存储桶中有文件 created/deleted 时触发 Lambda 函数。

我建议将 ZIP 文件隔离到它们自己的存储桶中,否则您还将支付检查上传的任何文件是否在您的特定“文件夹”中的费用,因为 Lambda 将针对整个存储桶触发(它可以忽略不计,但仍然值得指出)。如果隔离,您就会知道上传的任何文件都是 ZIP 文件。

您的 Lambda 然后可以使用 download_file (example provided by Boto3 documentation), unzip it using zipfile & eventually GZIP compress the file using gzip 从 S3 下载文件。

然后您可以使用 upload_object(example provided by Boto3 documentation) & then delete the original file from the original bucket using delete_object 将输出文件上传到新存储桶。

改造上述内容也应该相对简单,因为您将主要使用 aws_lambda_function & aws_s3_bucket 资源。

确保您的 Lambda 具有正确的 execution role 和适当的 IAM 策略来访问两个 S3 存储桶,您应该可以开始了。