1

我想设置 S3 存储桶的生命周期规则,以便存储桶中的每个文件在生成后 7 天被删除。

如果我将生命周期规则设置如下(下面是terraform代码,类似于控制台设置,所以我只是在这里使用它),从今天起7天后,桶“test”中的所有文件会被删除还是每个文件都被删除?由于它们是在不同日期创建的,因此在不同日期删除?我希望它们在不同的日期被删除,而不是一起删除。

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

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

2 回答 2

6

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

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

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

于 2018-03-07T05:01:30.150 回答
0

据我所知,上述配置将在创建存储桶 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)。

于 2019-02-06T11:53:43.407 回答