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

如何使用Amazon S3生命周期规则删除文件并排除folder3

Amazon S3 BucketA 2天自动删除(排除folder3)实现方案

方案1:S3原生生命周期规则(优先选择,无额外成本)

这是官方推荐的实现方式,你之前配置未生效大概率是排除逻辑或前缀匹配配置错误,按以下步骤配置即可:

  • 进入BucketA的「管理」页签,定位到「生命周期规则」模块,点击创建新规则
  • 规则作用范围选择「应用到存储桶中所有对象」,勾选下方的「我确认此规则将应用到存储桶中的所有对象」
  • 生命周期操作勾选:
    • 过期当前版本对象(未开版本控制只选这一项即可)
    • 永久删除非当前版本对象(开启版本控制时需要选)
  • 设置对象创建后2天自动过期
  • 核心排除逻辑配置:找到「前缀排除项」配置栏,添加排除前缀 folder3/,必须携带末尾的斜杠,否则会误匹配名称以folder3开头的其他文件/文件夹,无法完整排除整个目录
  • 保存规则即可,S3生命周期规则最长需要24小时同步生效,首次配置后请等待同步完成再验证效果

方案2:Lambda定时脚本(适合需要自定义扩展的场景)

如果有更复杂的过滤逻辑需求,可以用定时触发Lambda的方式实现:

  • 给Lambda函数配置IAM权限,允许其对BucketA执行s3:ListBucket、s3:DeleteObject操作
  • 函数核心参考代码:
import boto3
from datetime import datetime, timedelta

s3_client = boto3.client('s3')
TARGET_BUCKET = "BucketA"
EXCLUDE_FOLDER = "folder3/"
EXPIRE_AFTER_DAYS = 2

def lambda_handler(event, context):
    paginator = s3_client.get_paginator('list_objects_v2')
    # 遍历桶内所有对象
    for page in paginator.paginate(Bucket=TARGET_BUCKET):
        if "Contents" not in page:
            continue
        for obj in page["Contents"]:
            # 跳过folder3下的所有文件
            if obj["Key"].startswith(EXCLUDE_FOLDER):
                continue
            # 校验是否超过过期时间
            current_time = datetime.now(obj["LastModified"].tzinfo)
            if (current_time - obj["LastModified"]).days >= EXPIRE_AFTER_DAYS:
                s3_client.delete_object(Bucket=TARGET_BUCKET, Key=obj["Key"])
  • 配置Amazon EventBridge定时规则,设置每天触发一次Lambda函数即可,可按需添加删除日志、告警通知等扩展逻辑

之前配置不生效的常见排查点

  • 前缀/排除前缀末尾未加斜杠,匹配范围不符合预期
  • 仅配置了规则作用于folder1、folder2前缀,根目录下的零散文件不会被匹配
  • 刚配置的规则还在S3同步周期内,未到生效时间
  • 存储桶开启了版本控制,仅配置了当前版本过期,未配置历史版本删除规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 03:03:00