代码之家  ›  专栏  ›  技术社区  ›  user389955

AWS S3生命周期配置

  •  1
  • user389955  · 技术社区  · 7 年前

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

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

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

    resource "aws_s3_bucket" "s3" {
      bucket        = "test"
      lifecycle_rule {
        id      = "remove_after_7d"
        enabled = true
        expiration {
          days = 7
        }
      }
    }
    
    2 回复  |  直到 6 年前
        1
  •  6
  •   Michael - sqlbot    7 年前

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

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

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

        2
  •  0
  •   Subham    6 年前

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

    resource "aws_s3_bucket" "bucket" 
     {
      bucket = "<<bucket_name>>"
      acl    = "private"
    
      lifecycle_rule {
      id      = "log"
      enabled = true
      prefix = "log/log.txt"
    
    
      expiration {
               days = 7
                 }
    

    } }

    但我在更新现有bucket时遇到了一个问题(错误409)。