有没有办法压缩整个 s3 目录并将 zip 保留在那里而不下载它?

Har*_*rge 0 javascript amazon-s3 amazon-web-services node.js aws-lambda

我是 aws 新手,我想在 aws 中压缩一个目录并在 lambda 中获取压缩的 s3 URL。目前我正在使用 s3-zip 模块。但它直接下载zip。其实我不想下载。我希望它能用拉链装在桶里。有办法吗?我在下面分享了我的代码

    const params = {
    Bucket: S3BucketConfig.bucket,
    Prefix: folder
  }
  
  const filesArray = []
  const files = s3.listObjects(params).createReadStream()

  const xml = new XmlStream(files)
  xml.collect('Key')
  xml.on('endElement: Key', function(item) {
    filesArray.push(item['$text'].substr(folder.length))
  })
  xml
    .on('end', function () {
      zip(filesArray)
    })
  
  function zip(files) {
    const output = fs.createWriteStream(join(__dirname, fileName))
    s3Zip
     .archive({ region: "eu-west-1", bucket: S3BucketConfig.bucket, preserveFolderStructure: true }, folder, files)
     .pipe(output)
  }
Run Code Online (Sandbox Code Playgroud)

谁能帮我这个 ?提前致谢

Mar*_*cin 5

我希望它能用拉链装在桶里。有办法吗?

遗憾的是没有。S3 不是文件系统,而是对象存储。这意味着您无法对存储桶“内部”的对象执行修改。

您的 zip 操作需要下载您想要存档的所有对象,在本地压缩它们(例如在 ec2 实例、lambda 函数、本地工作站上),然后将 zip 上传到存储桶。

s3 -zip下载对象并将其打包到 zip 中。如果不先下载对象,则此模块或其他模块无法在存储桶“中”执行压缩操作。在压缩之前,对象不必物理存储在本地,因为它们可以从 S3 流式传输,但它仍然不在“存储桶”中。