我能否以编程方式将 S3 对象移动到 Glacier 存储 class?

Can I programmatically move S3 objects to the Glacier storage class?

我在 S3 存储桶中有 1000 多个大文件(5 - 500Mb,大多数是 ~100Mb),根本没有组织 - 没有 "directories"。这些文件都有不同的过期时间(有些在 60 天后过期,有些在 90 天后过期,等等),之后我想将它们移动到 Glacier 存储 class。

我查看了生命周期功能,但找不到如何将特定规则应用于一个文件。它们似乎只能通过使用前缀来工作,我宁愿不更改我的命名约定。

我已经尝试 - 使用 PHP SDK - 执行一个将 'StorageClass' 参数设置为 "GLACIER" 的 copyObject,但可以预见会出现异常。我想文档是最新的,确实没有这样的价值:-)

我真的希望我遗漏了一些东西,因为我不想下载这些文件然后将它们上传到 Glacier 'manually'。我也会错过 S3 控制台的简单恢复功能。

没有命令告诉 Amazon S3 将特定对象存档到 Amazon Glacier。相反,Lifecycle Rules 用于标识对象。

Lifecycle Configuration Elements 文档显示每条规则包括:

  • 规则元数据,包括规则 ID 和指示规则是启用还是禁用的状态。如果禁用规则,Amazon S3 将不会执行规则中指定的任何操作。
  • Prefix 通过应用规则的键前缀识别对象。
  • 当您希望 Amazon S3 执行指定操作时,一个或多个 transition/expiration 具有日期或时间段的操作 在对象的生命周期中。

识别哪些对象被转换的唯一方法是通过prefix参数。因此,您需要为每个对象指定一个单独的规则。 (前缀可以包括完整的对象名称。)

但是,每个生命周期配置有一个 1000 条规则的限制

是的,您可以一次将一个对象移动到 Amazon Glacier,但这实际上涉及将档案上传到 Glacier,而不是 'moving' 从 S3 上传档案。另外,请注意 - Glacier 的 费用比 S3 'per request' 高 ,这实际上可能比您节省的存储成本还要多。

同时,考虑使用 Amazon S3 Standard - Infrequent Access storage class,对于不常访问的数据,它可以 节省大约 50% 的 S3 存储成本

您可以使用 Lifecycle Rules 以编程方式将 S3 上的特定对象存档到 Glacier(带有您希望存档的确切对象的前缀)。

有一个PUT lifecycleAPI。此 API 替换了 entire 生命周期配置,因此如果您在此过程之外有规则,则需要将它们添加到您上传的每个生命周期中。如果要归档特定文件,您可以:

  • 为每个文件创建一个具有一个规则的生命周期,等到文件传输完毕,然后对下一个文件执行相同的操作
  • 创建生命周期配置,每个文件一个规则

第二个会完成得更快(因为您不需要在文件之间等待),但需要您提前知道要归档的所有文件。

每个生命周期配置有 1,000 条规则的限制,因此如果您有大量文件要归档,则需要将它们拆分为单独的生命周期配置。