s3每个对象到期

时间:2012-08-29 20:20:12

标签: amazon-s3

我知道如何使用给定特定前缀的对象到期规则使S3存储桶中的对象失效,但是出于我的目的,我想以编程方式在每个对象的基础上设置到期日期。

Java SDK似乎表明这是可能的,因为它有setExpirationTime方法,但每当我使用此方法设置过期日期时,似乎没有任何事情发生,并且对象永不过期。此外,通过aws控制台查看对象属性,似乎没有设置过期。

是否不支持每个文件过期? /我需要做些额外的步骤才能让它发挥作用吗? /如果不支持每个文件到期,是否可以排除与过期前缀匹配的文件过期?

提前致谢!

6 个答案:

答案 0 :(得分:12)

看起来似乎不支持每个object expiration,而是每桶配置生命周期配置,每个配置最多100个规则,如您所见。

  

存储桶具有一个生命周期配置。生命周期配置   最多可以有100条规则。

     

生命周期值必须是非零正整数。亚马逊S3   通过添加指定的到期时间来计算到期时间   在规则中对象创建时间和舍入结果   时间到第二天午夜UTC。

如果不支持每个文件到期,是否可以排除a 匹配过期前缀的文件是否已过期?

看起来你也不能重叠规则。

  

注意确保规则不重叠。例如,   以下生命周期配置具有用于设置对象的规则   前缀“文档”将在30天后过期。配置也   有另一个规则,设置前缀为“documents / 2011”的对象   365天后过期。在这种情况下,Amazon S3会返回错误   消息。

答案 1 :(得分:5)

这是一种可能适用于某些情况的替代方法:

您可以将存储桶生命周期设置为在短时间内使对象失效(1,7或其他)。然后,在每个对象到期之前,如果您不希望该对象到期,则以编程方式延长其到期时间。

您可以通过将对象“复制”到自身来重置S3对象的时间戳,并使用指令将存储类更改为当前所在的类。它基本上是一个“noop”,就像Linux / Unix“触摸”命令一样。

我写了一篇文章,通过示例aws-cli命令演示了如何执行此操作:http://alestic.com/2013/09/s3-lifecycle-extend

答案 2 :(得分:5)

完成此任务的另一种方法是使用对象标记。

为要设置生命周期的对象的每个对象设置唯一标记,然后为每个对象创建生命周期配置规则,并在filter元素中使用对象特定标记。

此标记可以是对象名称,您还可以为不具有公共前缀的对象子集制定规则。

您可以在此处找到有关生命周期配置的更多信息 http://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html

答案 3 :(得分:1)

我通过使用s3cmd命令将对象复制到自身来延长过期时间。它基本上像触摸'一样工作。

  

s3cmd cp s3://bucket-name/file.txt s3://bucket-name/file.txt

答案 4 :(得分:1)

类似于Eric's answer,您可以设置较短的存储桶生命周期策略,然后使用保留期锁定(请参见the docs)来按对象设置到期日期。

答案 5 :(得分:0)

您可以根据文件规则将文件拆分为“文件夹”,然后应用Prefix Filter