AWS S3生命周期配置

时间:2018-03-07 02:25:35

标签: amazon-s3 terraform terraform-provider-aws

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

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

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

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

2 个答案:

答案 0 :(得分:3)

对象将在创建个体后7天内删除 - 而不是在创建规则后7天。例如,如果存储桶中的所有对象都至少有7天的历史,那么在创建规则后大约24小时内它们都应该消失。

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

对于非版本化存储桶,您是正确的 - 没有以前的版本要删除。但是,使用版本化的存储桶通常是一个好主意,因为它可以消除因无意中删除或覆盖对象而导致数据丢失的风险,无论出于何种原因(例如应用程序中的错误)。

答案 1 :(得分:-1)

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