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

如何将S3中的压缩包解压到AWS Lambda函数的/tmp目录

适配AWS Lambda Node.js环境的解压方案

首先修正你当前代码的问题:fs.writeFile混用了await和回调函数,不会按预期等待文件写入完成,建议使用fs/promises的异步API,同时处理S3 Key可能存在的路径前缀问题,避免写入/tmp时报目录不存在错误:

const AWS = require('aws-sdk');
const fs = require('fs/promises');
const s3 = new AWS.S3();

const params = { Bucket: "{BUCKET_NAME}", Key: "{key}.zip" };
const data = await s3.getObject(params).promise();
// 取Key的最后一段作为本地文件名,规避S3路径前缀导致的写入错误
const localFileName = params.Key.split('/').pop();
const localFilePath = `/tmp/${localFileName}`;
await fs.writeFile(localFilePath, data.Body);

1. 处理ZIP格式文件

推荐使用adm-zip库,纯JS实现无原生依赖,不需要编译即可在Lambda环境运行,完美支持多文件嵌套结构的zip包解压:

  • 安装命令:npm install adm-zip
  • 解压示例代码:
const AdmZip = require('adm-zip');
// 加载本地zip文件
const zip = new AdmZip(localFilePath);
// 全部解压到指定目录,第二个参数为true时会自动覆盖已存在的文件
zip.extractAllTo("/tmp/unzip_result", true);

// 如果需要单独处理解压后的文件,可遍历文件列表
const entryList = zip.getEntries();
entryList.forEach(entry => {
  if (!entry.isDirectory) {
    console.log('解压出文件:', entry.entryName);
  }
});

2. 处理TAR格式文件

推荐使用tar库,同样为纯JS实现,支持普通tar包及gzip压缩的tar包(.tar.gz/.tgz):

  • 安装命令:npm install tar
  • 解压示例代码:
const tar = require('tar');
await tar.x({
  file: localFilePath, // 待解压的tar包路径
  C: "/tmp/untar_result", // 解压目标目录,不存在会自动创建
  gzip: true // 如果是gzip压缩的tar包需要开启该参数,普通tar包可以省略
});

Lambda环境注意事项

  • Lambda的/tmp目录最大存储容量为512MB,Lambda@Edge环境仅为128MB,解压前需预估解压后文件总大小,避免超出存储上限报错
  • 同一Lambda实例处理多次请求时/tmp目录的内容会残留,建议解压使用完成后及时清理源压缩包和解压后的无用文件,避免占满存储空间
  • 打包部署时建议使用npm install --production仅安装生产依赖,减小部署包体积

内容的提问来源于stack exchange,提问作者H.M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:45:03