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

Har*_*tal 1 archive amazon-s3 amazon-web-services amazon-glacier

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

假设我不介意将文件归档到单个(或多个)tar/zip 中 - 将这些文件转换到 Glacier DA 的最佳实践是什么?

需要注意的是,我只在 S3 上有这些文件,而不在任何本地计算机上。

Joh*_*ein 5

最有效的方法是:

  • 在与存储桶相同的区域中启动Amazon EC2 实例。选择具有高带宽网络的实例类型(例如t3系列)。以现货定价启动它,因为您可以承受它被停止的微小可能性。分配充足的 EBS 磁盘空间。(或者,您可以选择存储优化实例,因为磁盘空间是免费的,但该实例更昂贵。您的选择!)
  • 通过指定要复制的路径(子目录),使用 AWS 命令​​行界面 (CLI)将文件子集下载到实例。不要尝试一次完成所有事情!
  • 压缩EC2 实例上的文件
  • 使用以下命令将压缩文件上传到 S3--storage-class DEEP_ARCHIVE
  • 检查一切是否正常,然后对另一个子集重复!

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

如果列出文件子集所需的时间过长,您可以考虑使用Amazon S3 Inventory,它可以提供列出所有对象的每日或每周 CSV 文件。然后,您可以使用此列表来专门复制文件,或标识要复制的路径/子目录。

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