如何使用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
相关产品推荐
相关产品推荐

