我有一个包含数百万个文件的 S3 存储桶,我想下载所有文件。由于存储空间不足,我想下载它们,动态压缩它们,然后保存它们。我该怎么做?
为了说明我的意思: aws s3 cp --recursive s3://bucket | gzip > file
答案1
目前尚不清楚您是否要保留 S3 中未压缩的对象,或者存储桶内容是否仍在变化。
您可以选择使用S3 清单。它不是即时的,但它会自动生成存储桶中的对象列表并将其写入 S3 存储桶(同一个存储桶或另一个存储桶)。您可以将此列表读入一个小脚本(无论您喜欢什么)并让它一次处理一个对象。使用 S3 CLI 拉下对象,然后使用 OS/脚本工具对其进行压缩。
我强烈建议构建一些可以检查压缩对象是否已经存在的东西,这样如果过程失败或者添加了新对象,您就可以重新启动该过程,而不必再次处理所有内容。
如果您要将压缩对象写回 S3,请考虑使用 EC2 实例或 Lambda。使用 Lambda,您可能需要使用文件流来动态压缩文件,而不是将其拉下来。您应该至少能够找到 Python 的示例,如果没有其他受支持的语言。
-- 需要注意的是,粗略计算一下这将花费多少钱。获取请求相当便宜,但数据传输出去可能会很昂贵。此外,如果您使用除标准之外的任何存储类别,则可能会产生与之相关的检索成本。