将 S3 上的数百万个小文件归档到 S3 Glacier Deep Archive

Archiving millions of small files on S3 to S3 Glacier Deep Archive

我在 S3 (4TB) 上有大约 80,000,000 个 50KB 文件,我想将其传输到 Glacier DA。 我开始意识到将大量小文件传输到 Glacier 会降低成本。

假设我不介意将我的文件归档为一个(或多个)tar/zips - 将这些文件转换到 Glacier DA 的最佳做法是什么?

重要的是要注意我只有 S3 上有这些文件,而不是任何本地机器上。

最有效的方法是:

  • 在与存储桶相同的区域启动一个 Amazon EC2 实例。选择具有高带宽网络的实例类型(例如 t3 系列)。以 现货定价 启动它,因为您可以承受它被停止的小概率。分配大量 EBS 磁盘 space。 (或者,您可以选择存储优化实例,因为磁盘 space 是免费提供的,但实例更贵。您的选择!)
  • 通过指定要复制的路径(子目录),使用 AWS Command-Line Interface (CLI) 下载文件的子集 到实例。不要尝试一次完成所有操作!
  • Zip/compress EC2 实例上的文件
  • 使用--storage-class DEEP_ARCHIVE
  • 将压缩文件上传到S3
  • 检查是否一切正常,然后对另一个子集重复!

以上将产生很少的费用,因为您可以在不再需要时终止 EC2,而 EBS 仅在卷存在时才收费。

如果列出文件子集的时间太长,您可以考虑使用 Amazon S3 Inventory,它可以提供列出所有对象的每日或每周 CSV 文件。然后你可以使用这个列表来专门复制文件,或者指定一个path/subdirectory来复制。

作为额外的建议...如果您的系统甚至继续收集 更多 个文件,您可以考虑以不同的方式收集数据(例如流式传输到 Kinesis Firehose 将数据一起批处理),或者定期合并数据,而不是让它再次爬升到这么多文件。如果可能的话,更少、更大的文件更容易在流程中使用。