我知道如何使用给定前缀的对象过期规则使 S3 存储桶中的对象过期,但是出于我的目的,我想以编程方式基于每个对象设置过期日期。
Java SDK 似乎表明这是可能的,因为它有一个setExpirationTime方法,但是每当我使用此方法设置过期日期时,似乎什么都没有发生,并且对象永远不会过期。此外,通过 aws 控制台查看对象属性,似乎没有设置过期。
不支持按文件过期吗?/我需要做任何额外的步骤才能让它工作吗?/ 如果不支持按文件过期,是否可以排除与过期前缀匹配的文件过期?
提前致谢!
我知道如何使用给定前缀的对象过期规则使 S3 存储桶中的对象过期,但是出于我的目的,我想以编程方式基于每个对象设置过期日期。
Java SDK 似乎表明这是可能的,因为它有一个setExpirationTime方法,但是每当我使用此方法设置过期日期时,似乎什么都没有发生,并且对象永远不会过期。此外,通过 aws 控制台查看对象属性,似乎没有设置过期。
不支持按文件过期吗?/我需要做任何额外的步骤才能让它工作吗?/ 如果不支持按文件过期,是否可以排除与过期前缀匹配的文件过期?
提前致谢!
正如您所发现的,它似乎不支持每个对象过期,而是支持每个存储桶生命周期配置,每个配置最多 100 条规则。
一个桶有一个生命周期配置。一个生命周期配置最多可以有 100 条规则。
生命周期值必须是非零正整数。Amazon S3 通过将规则中指定的到期期限与对象创建时间相加并将结果时间四舍五入到 UTC 的第二天午夜来计算到期时间。
如果不支持按文件过期,是否可以排除与过期前缀匹配的文件过期?
看起来你也不能重叠规则。
注意确保规则不重叠。例如,以下生命周期配置有一个规则,将前缀为“documents”的对象设置为在 30 天后过期。该配置还有另一条规则,将前缀为“documents/2011”的对象设置为在 365 天后过期。在这种情况下,Amazon S3 会返回一条错误消息。
完成此任务的另一种方法是使用对象标签。
为要为其设置生命周期的对象中的每个对象设置唯一标签,然后为每个对象创建生命周期配置规则,并在过滤器元素中使用对象特定标签。
此标记可以是对象名称,您还可以为不具有公共前缀的对象子集制定规则。
您可以在此处找到有关生命周期配置的更多信息 http://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html
这是一种可能适用于某些情况的替代方法:
您可以将存储桶生命周期设置为在短时间内(1、7 天等)后使对象过期。然后,在每个对象过期之前,如果您不希望该对象过期,则以编程方式延长其过期时间。
您可以重置 S3 对象上的时间戳,方法是使用将存储类更改为当前类的指令将对象“复制”到自身。它基本上是一个类似于 Linux/Unix“触摸”命令的“noop”。
我写了一篇文章,通过示例 aws-cli 命令演示如何执行此操作: http: //alestic.com/2013/09/s3-lifecycle-extend
我通过使用 s3cmd 命令将对象复制到自身中来延长到期时间。它基本上像“触摸”一样工作。
s3cmd cp s3://bucket-name/file.txt s3://bucket-name/file.txt
您可以根据规则将文件拆分为“文件夹”并应用Prefix Filter。