You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解压S3内的ZIP文件并重压缩为gz格式转存至其他S3存储桶

服务选型结论

该场景优先选用 Lambda + S3事件触发 作为核心实现方案,单Zip体积小于500MB、解压后单个文件小于2GB的场景可完全适配;如果你的Zip包普遍大于500MB、或单Zip内包含上千个小文件,可额外搭配S3 Batch Operations或Glue Job处理存量/超大文件任务。
不建议直接全量使用Glue Job实现:Glue更适合大规模批量ETL、结构化数据处理场景,你的需求属于纯二进制文件的解压重压缩,是典型的轻量级IO密集型任务,使用Glue成本更高,增量触发逻辑也更繁琐,远不如Lambda的S3事件触发直接。

完整实现逻辑
  • 触发层:给源S3桶配置 s3:ObjectCreated:* 事件通知,新增Zip文件时自动触发Lambda函数
  • 核心处理逻辑(Lambda侧):
    1. 从事件参数中获取源桶名、Zip对象Key,优先用流式方式读取Zip文件,无需全量下载到本地,避免占用Lambda /tmp 临时目录空间(Lambda临时目录最大容量为10GB)
    2. 流式解压Zip包,遍历每个内部文件,边读取边用gzip压缩为 $file.gz 格式
    3. 压缩后的文件直接流式上传到目标S3桶,无需落地本地磁盘
  • 兜底机制:如果遇到超大Zip包(>10GB)或者超过Lambda最长15分钟执行时长无法处理的任务,将任务信息推到SQS队列,触发Glue Job异步批量处理
核心注意事项
  • Lambda配置建议:内存配置到2048MB以上,对应CPU和网络带宽都会有明显提升,可大幅加快压缩处理速度,超时时间按需配置到最长15分钟
  • 存量文件处理:可调用S3清单功能批量触发Lambda,或用S3 Batch Operations批量提交任务,无需自行编写桶遍历逻辑
  • 异常重试:配置死信队列(DLQ),处理失败的Zip文件事件会推送到DLQ,方便后续人工排查和重试
Terraform编排核心资源清单

你需要在Terraform中定义以下核心资源即可实现全链路编排:

  1. 源S3桶、目标S3桶(按需开启版本控制、服务端加密配置)
  2. Lambda执行IAM角色,需包含S3读写权限、CloudWatch日志写入权限
  3. Lambda函数代码包(可将Python处理代码打包为Zip上传,或用Terraform archive_file 数据源自动打包)
  4. S3桶事件通知配置,关联源桶的ObjectCreated事件到Lambda函数
  5. 可选资源:SQS队列、Glue Job(用于兜底超大文件/存量批量处理场景)
Glue Job适配场景说明

如果你确实需要使用Glue Job实现,仅建议匹配以下场景:

  • 存量Zip文件总容量超过10TB,单Zip包普遍大于10GB
  • 需求以批量定时处理全桶Zip文件为主,而非仅处理增量新增文件
    Glue Job可选用Python Shell模式,处理代码和Lambda逻辑完全一致,无需启用Spark集群,成本远低于Spark集群模式,触发可搭配EventBridge定时调度或SQS消息触发实现。

内容的提问来源于stack exchange,提问作者x89

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 13:06:07