我在S3中的某个位置上传了一个zip存档(比如/foo/bar.zip) 我想在bar.zip中提取值并将其放在/ foo下,而无需下载或重新上传提取的文件。我怎么能这样做,以便S3被视为非常像文件系统
答案 0 :(得分:24)
S3并不是真的设计允许这样做;通常你必须下载文件,处理它并上传提取的文件。
但是,可能有以下几种选择:
您可以使用s3fs
和FUSE
将S3存储桶挂载为本地文件系统(请参阅article和github site)。这仍然需要下载和上传文件,但它会将这些操作隐藏在文件系统界面之后。
如果您主要关注的是避免将数据从AWS下载到本地计算机,那么您当然可以将数据下载到远程EC2 instance并在那里进行工作,无论是否有{{ 1}}。这使数据保持在亚马逊数据中心内。
您可以使用AWS Lambda对文件执行远程操作,而无需将其下载到本地计算机上。
您需要创建,打包和上传用s3fs
编写的小程序来访问,解压缩和上传文件。此处理将在幕后的AWS基础架构上进行,因此您无需将任何文件下载到您自己的计算机上。请参阅FAQs。
最后,您需要找到一种触发此代码的方法 - 通常,在Lambda中,这将通过将zip文件上载到S3自动触发。如果文件已经存在,您可能需要通过AWS API提供的node.js
命令手动触发它。请参阅AWS Lambda walkthroughs和API docs。
但是,这是一种避免下载的精心设计方式,如果您需要处理大量的zip文件,可能还是值得的!另请注意,Lambda函数的最大持续时间限制为5分钟(default timeout为3秒),因此如果文件非常大,可能会耗尽时间 - 但invoke-async
中的临时空间限制为500MB ,你的文件大小也是有限的。