如何在不使用生命周期规则的情况下将 S3 Standard 转换为 Glacier

How to convert S3 Standard to Glacier without using Lifecycle Rules

我有数百 GB 的备份 folders/files 使用 "Standard" 存储 class 存储在 AWS S3 存储桶中。我使用 Arq 定期自动将所有内容备份到 S3。

由于种种原因,我在第一次启动备份时选择了标准。但是,这些 folders/files 中的 none 不再需要频繁访问,将来也不会。 Glacier 存储 class 现在非常合适。

我知道我可以使用生命周期规则让 AWS 每天自动扫描存储桶以查找与特定规则匹配的文件并将它们移动到 Glacier。但是,我真的不需要这样做——我宁愿现在就把整个桶全部拿走,然后把它移到 Glacier。只需完成它,以便该存储桶中的所有现有和未来文件都存储在 Glacier 中。

我该怎么做?我非常愿意通过控制台或 CLI 来执行此操作,而不是开发脚本来使用 API。也就是说,如果没有其他办法并且您知道某处存在现有脚本,我不反对。

在存储桶的 S3 控制台中,"Change Storage Class" 菜单项仅提供标准、标准-IA、一个区域-IA 和减少冗余的选项。

如果您要提出需要 CLI 的建议,如果您不介意,我将不胜感激明确的命令和语法 -- 我对 CLI 还不够熟悉。

有一个 Glacier API 您可以与之集成:https://docs.aws.amazon.com/amazonglacier/latest/dev/amazon-glacier-api.html 但仅归档一个存储桶就需要大量工作!正如@michael-sqlbot 在下面提到的,你试图实现的并不是这个 API 真正设计的目的,所以不是一个好的选择

如果您在此处查看之前关于 S3/Glacier 以及在它们之间移动文件的问题,大多数用户建议使用生命周期规则。例如:Move files between amazon S3 to Glacier and vice versa programatically using API

您可以设置一个生命周期规则,以便它在文件创建 1 天后将文件从 S3 转移到 Glacier - 因此在您的情况下,在您创建规则并对其进行评估后,它会将所有文件移动到 Glacier。例如,请参阅本指南(尤其是第 5b 点):https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-lifecycle.html

这个答案可能并不适合所有人,但根据您的需要,它肯定是一个选择。

这听起来很荒谬,但可能最简单的方法就是将它们从 S3 下载然后重新上传。这当然只有在少数情况下才有效,否则您需要编写脚本。

aws s3 cp s3://[s3-bucket]/[filenames.ext]

aws s3 rm s3://[s3-bucket]/[filenames.ext]

aws s3 cp [filenames.ext] s3://[s3-bucket] --storage-class DEEP_ARCHIVE

根据需要重复其他文件。

当然请记住,这可能会产生转入和转出费用。对我来说,这没什么大不了的。