You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform配置版本化S3桶生命周期规则:永久删除旧对象

问题解答

首先明确S3版本控制下的核心概念:

  • 当前版本:对象的最新版本,未被覆盖或标记删除的版本
  • 非当前版本:被新版本覆盖、或被删除标记替代的旧版本

针对你的需求(永久删除所有创建满365天的对象,无论存储类),仅设置expiration是不可行的,原因如下:

  • expiration块的days参数,在启用版本控制的桶中,只会给当前版本对象添加删除标记(Delete Marker),并不会彻底删除对象本身——此时原对象会变成非当前版本,依然保存在桶中。

要实现彻底删除的需求,你需要同时配置noncurrent_version_expiration,配合expiration一起工作:

  1. expiration:让创建满365天的当前版本对象生成删除标记,转为非当前版本
  2. noncurrent_version_expiration:彻底删除满足条件的非当前版本对象(包括由expiration生成删除标记后的原对象,以及其他旧版本对象)

正确的Terraform配置示例

resource "aws_s3_bucket" "main" {
  bucket = "zzz-bucket-127364-${terraform.workspace}"

  server_side_encryption_configuration {
    rule {
      apply_server_side_encryption_by_default {
        sse_algorithm = "AES256"
      }
    }
  }

  lifecycle_rule {
    enabled = true

    # 180天后转存至Glacier
    transition {
      days          = 180
      storage_class = "GLACIER"
    }
    
    # 对创建满365天的当前版本对象添加删除标记,转为非当前版本
    expiration {
      days = 365
    }

    # 彻底删除成为非当前版本满0天的对象(即转为非当前版本后立即删除)
    # 若希望给非当前版本留缓冲期,可调整days为大于0的数值
    noncurrent_version_expiration {
      days = 0
    }
 }
  
  versioning {
    enabled = true
  }
}

关键说明

  • noncurrent_version_expiration的days参数,指的是对象成为非当前版本后的天数,而非对象创建的天数。上述配置中,当前版本在365天时转为非当前版本,随后立即被删除,整体效果符合“创建满365天彻底删除”的需求。
  • 该配置会覆盖所有存储类(包括Glacier)的对象,满足你“无论存储类”的要求。

内容的提问来源于stack exchange,提问作者Trent

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 06:37:14