aws s3api delete-objects --bucket b --delete file://del.json
# del.json: {"Objects":[{"Key":"a/1.jpg"}],"Quiet":true}
清理脚本按一千个 key 一批调 DeleteObjects,跑到第七批开始返回 503 SlowDown,后面全部失败,已删的只有七千个。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,批量删除的请求速率有上限,短时间集中打过去就触发限流。503 是让客户端退避的信号,不是权限或参数错误。脚本没有退避直接重试,反而把限流时间拉长。
围绕「批量删除限速」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。
接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。
处理上按这个顺序:每批之间加固定间隔 比如 200ms;遇到 503 用指数退避 最多重试五次;单批从一千降到三百 减小冲击;按前缀分片 多个进程错开时间跑。
改完只确认一件事:脚本跑完返回的 Errors 为空,桶里目标前缀的对象数为 0。
