如何批量删除S3存储桶中Glacier Flexible Retrieval层级的对象?
批量删除S3存储桶中Glacier Flexible Retrieval层级的对象
针对你有8000万对象的S3桶,仅需删除近一个月内处于Glacier Flexible Retrieval层级的对象,推荐以下两种高效方案:
方案一:S3 Inventory + AWS CLI 批量删除
这种方案适合有一定命令行操作经验的场景,步骤清晰可控:
生成目标对象的Inventory清单
到S3桶的管理后台,找到「库存」模块,创建新的库存配置:- 选择当前桶作为源桶,设置一个目标前缀存放Inventory文件(比如
s3://your-bucket/inventory/) - 筛选条件:时间范围选「最近30天」,存储类仅勾选「Glacier Flexible Retrieval」
- 导出格式选CSV,确保包含「对象键(Key)」和「存储类(Storage Class)」字段
- 保存配置后,等待几小时(根据桶大小),AWS会生成对应的Inventory文件
- 选择当前桶作为源桶,设置一个目标前缀存放Inventory文件(比如
提取对象键列表
到指定的目标前缀下载生成的CSV文件,用工具提取出所有对象键:- 用shell命令的话,可以直接过滤出对象键列(假设对象键是第一列):
awk -F ',' '{print $1}' inventory-file.csv | grep -v "Key" > glacier_objects.txt - 用Excel的话,直接筛选「存储类」列等于
GLACIER,然后复制「对象键」列到文本文件,每行一个键
- 用shell命令的话,可以直接过滤出对象键列(假设对象键是第一列):
批量删除对象
把提取的对象键转换成S3批量删除要求的JSON格式,然后执行删除:- 用
jq工具生成删除用的JSON(如果没装jq,先通过包管理器安装):jq -Rn '{Objects: [inputs | {Key: .}], Quiet: true}' glacier_objects.txt > delete.json - 注意:
delete-objects接口一次最多处理1000个对象,如果你的对象超过1000个,需要拆分文件:
然后对每个分片生成JSON并执行删除:split -l 1000 glacier_objects.txt chunk-for file in chunk-*; do jq -Rn '{Objects: [inputs | {Key: .}], Quiet: true}' "$file" > "$file.json" aws s3api delete-objects --bucket your-bucket-name --delete file://"$file.json" done
- 用
方案二:S3 Batch Operations(推荐大规模场景)
如果对象数量较多,用S3 Batch Operations更省心,AWS会自动处理分片、重试等:
准备对象列表
可以用方案一中生成的glacier_objects.txt,或者直接用S3 Inventory的输出文件作为对象列表源创建Batch Operations任务
到AWS控制台的S3 Batch Operations页面,创建新任务:- 操作类型选择「删除对象」,指定目标桶
- 对象列表来源:选择「S3对象清单」并指定Inventory文件的位置,或者选择「上传清单」上传
glacier_objects.txt - 配置任务参数:开启「Quiet」模式可以减少日志输出,避免生成大量无关日志
- 确认权限后提交任务,AWS会自动开始批量删除,你可以在控制台查看任务进度
重要注意事项
- 验证对象列表:操作前一定要随机抽查几个对象,确认它们确实是近一个月的Glacier层级对象,避免误删Standard层级的内容
- 权限检查:确保你的AWS账号拥有
s3:GetInventoryConfiguration、s3:GetObject、s3:DeleteObject等必要权限 - 删除Glacier对象无需恢复:直接删除即可,不会产生对象恢复费用,删除后对象会被永久移除
内容的提问来源于stack exchange,提问作者Prithvi Boinpally
相关产品推荐
相关产品推荐

