如何通过AWS CLI为S3桶内所有Deep Glacier文件批量发起恢复?
S3 Deep Archive存储层文件批量恢复AWS CLI实现方案
前置要求
已完成AWS CLI身份配置,对应账号具备s3:ListBucket、s3:RestoreObject权限。
Linux/macOS 环境实现
直接执行以下命令即可批量发起恢复请求:
aws s3api list-objects-v2 --bucket my-backup-bucket \ --query "Contents[?StorageClass=='DEEP_ARCHIVE'].Key" \ --output text \ --no-paginate | tr '\t' '\n' | xargs -I {} aws s3api restore-object \ --bucket my-backup-bucket \ --key "{}" \ --restore-request Days=30,GlacierJobParameters={Tier=Bulk}
参数调整说明:
- 替换
my-backup-bucket为你的实际存储桶名称 Days=30:修改为你需要的恢复后文件可访问的天数,到期后文件会自动回到Deep Archive存储层Tier=Bulk:批量恢复推荐选择Bulk层级,费用最低,恢复耗时5-12小时;可选Standard层级,恢复耗时12小时以内,费用高于Bulk;注意DEEP_ARCHIVE不支持Expedited快速恢复层级- 如果仅需要恢复指定目录下的文件,在
list-objects-v2命令中添加--prefix 目标目录路径/参数即可
Windows PowerShell 环境实现
执行以下脚本:
$keys = aws s3api list-objects-v2 --bucket my-backup-bucket --query "Contents[?StorageClass=='DEEP_ARCHIVE'].Key" --output text --no-paginate foreach ($key in $keys -split "`t") { aws s3api restore-object --bucket my-backup-bucket --key $key --restore-request Days=30,GlacierJobParameters={Tier=Bulk} }
参数调整规则和Linux环境一致。
验证恢复状态
单个文件恢复状态可以通过以下命令查看:
aws s3api head-object --bucket my-backup-bucket --key 目标文件路径
返回结果中Restore字段的ongoing-request值为false时代表恢复完成,expiry-date字段会展示恢复文件的到期时间。
注意事项
- 若存储桶文件总数超过1000,必须添加
--no-paginate参数才能拉取全量文件列表,避免漏处理 - 若终端会话不稳定,建议在Linux/macOS环境下通过nohup执行命令,避免会话断开导致任务中断
- 启用版本控制的存储桶默认恢复最新版本的文件,需要恢复历史版本时可以在
restore-object命令中添加--version-id参数指定对应版本号
内容的提问来源于stack exchange,提问作者mcExchange
相关产品推荐
相关产品推荐

