我可以以编程方式将S3对象移动到Glacier存储类吗?

时间:2016-09-30 09:48:50

标签: php amazon-web-services amazon-s3 amazon-glacier

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

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

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

我真的希望我遗失了一些东西,因为我不想下载这些文件,然后“手动”将它们上传到Glacier。我也错过了S3控制台的简易恢复功能。

2 个答案:

答案 0 :(得分:2)

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

Lifecycle Configuration Elements文档显示了包含以下内容的每条规则:

  • 规则元数据,其中包含规则ID以及指示是启用还是禁用规则的状态。如果禁用规则,Amazon S3将不会执行规则中指定的任何操作。
  • 前缀按规则适用的密钥前缀标识对象。
  • 当您希望Amazon S3执行指定的操作时,对象生命周期中的一个或多个转换/到期操作以及日期或时间段

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

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

是的,您可以将对象一次一个地移动到Amazon Glacier,但这实际上涉及将档案上传到Glacier而不是从S3“移动”它们。另外,请注意 - Glacier的每次请求收费比 更高,实际上可能比您节省的存储成本更高。

与此同时,请考虑使用Amazon S3 Standard - Infrequent Access storage class可以为不常访问的数据节省大约50%的S3存储费用

答案 1 :(得分:0)

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

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

  • 对于每个文件,使用一个规则创建生命周期,等待文件传输完毕,然后对下一个文件执行相同操作
  • 使用每个文件一个规则创建生命周期配置

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

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