如何从S3中的zip存档中提取文件

Rpj*_*Rpj 13 cloud amazon-s3 amazon-web-services

我在S3中的某个位置上传了一个zip存档(比如/foo/bar.zip)我想在bar.zip中提取值并将其放在/ foo下,而不下载或重新上传提取的文件.我该怎么做,所以S3被视为非常像文件系统

DNA*_*DNA 25

S3并不是真的设计允许这样做; 通常你必须下载文件,处理它并上传提取的文件.

但是,可能有以下几种选择:

  1. 您可以使用s3fs和将S3存储桶挂载为本地文件系统FUSE(请参阅文章github站点).这仍然需要下载和上载文件,但它将这些操作隐藏在文件系统接口之后.

  2. 如果您主要关注的是避免将数据从AWS下载到本地计算机,那么您当然可以将数据下载到远程EC2实例上并在那里进行工作,无论是否有s3fs.这使数据保持在亚马逊数据中心内.

  3. 您可以使用AWS Lambda对文件执行远程操作,而无需将其下载到本地计算机上.

您需要创建,打包和上载写入的小程序node.js以访问,解压缩和上载文件.此处理将在幕后的AWS基础架构上进行,因此您无需将任何文件下载到您自己的计算机上.请参阅常见问题解答.

最后,您需要找到一种触发此代码的方法 - 通常,在Lambda中,这将通过将zip文件上载到S3自动触发.如果文件已经存在,您可能需要通过invoke-asyncAWS API提供的命令手动触发它.请参阅AWS Lambda 演练API文档.

但是,这是一种避免下载的复杂方法,如果您需要处理大量的zip文件,这可能是值得的!另请注意,Lambda函数的最大持续时间限制为5分钟(默认超时为3秒),因此如果文件非常大,可能会耗尽时间 - 但由于临时空间/tmp限制为500MB,因此文件大小也有限.