AWS S3 生命周期配置

AWS S3 life cycle configuration

我想设置S3 bucket的生命周期规则,让bucket中的每个文件在生成7天后删除。

如果我设置生命周期规则如下(下面是terraform代码,类似console设置,所以我就用在这里),7天后bucket "test"中的所有文件会被删除吗从今天开始还是每个文件都在不同的日期被删除,因为它们是在不同的日期创建的?我希望它们在不同的日期被删除,而不是一起删除。

顺便说一句,我想我不需要配置:永久删除以前的版本,因为我的 s3 没有启用版本。如有不妥请指正

resource "aws_s3_bucket" "s3" {
  bucket        = "test"
  lifecycle_rule {
    id      = "remove_after_7d"
    enabled = true
    expiration {
      days = 7
    }
  }
}

对象将在其单独创建 7 天后被删除,而不是在您创建规则后 7 天。例如,如果存储桶中的所有对象至少存在 7 天,则它们应该在您创建规则后大约 24 小时内全部消失。

请注意,时间并不精确,因为删除过程是在后台完成的,因此对象通常会比您预期的多停留几个小时,如果您假设对象的时间为 exacrly 7 × 24 小时将保留在桶中。首次创建策略后,对象可能需要一两天时间才会消失。但是,一旦针对所有对象对策略进行了全面评估,S3 将在过期时间到达时停止向您收取过期对象的存储费用,即使删除过程尚未开始实际删除它们也是如此。

对于 non-versioned 个存储桶,您是正确的 -- 没有要删除的先前版本。不过,使用版本化存储桶通常是个好主意,因为它消除了由于任何原因(例如应用程序中的错误)无意中删除或覆盖对象而导致数据丢失的风险。

据我所知,上述配置将在创建存储桶 7 天后删除存储桶。如果要在创建对象后的特定日期后删除特定文件,则必须将路径作为前缀提及。例如。删除存储桶日志文件夹中的 log.txt:

resource "aws_s3_bucket" "bucket" 
 {
  bucket = "<<bucket_name>>"
  acl    = "private"

  lifecycle_rule {
  id      = "log"
  enabled = true
  prefix = "log/log.txt"


  expiration {
           days = 7
             }

} }

但我在更新现有存储桶时遇到问题(错误 409)。