存储在S3中的数据,我设定了将超过360天之后自动转入archive模式,因为经过1年后,这些旧数据使用就很少了,转换存储模式能节省不少费用。
但是对于这些已经archive之后的文件,需要使用时,默认是无法下载的,需要去恢复才行。
对于单个或者少量文件恢复,可以直接在Console界面上操作


但是对于大量文件需要恢复对情况,就必须用aws cli或者使用Batch Operations 来处理,S3 Batch Job是最好的方式,具体如下

1.- 使用命令导出需要恢复的文件列表,在Cloudshell中执行
##替换Your-S3-Bucket,和Your-Folder/Path
aws s3api list-objects-v2 --bucket Your-S3-Bucket --prefix Your-Folder/Path/ --query "Contents[?StorageClass=='GLACIER'][Key]" --output text | sed 's/\t/\n/g' > galcier-restore.txt
##根据特定文件名获取文件列表,文件夹有空格用\, grep -E 截取特定文件名字符
aws s3api list-objects-v2 --bucket Your-S3-Bucket --prefix Marti/Sum\ data/ --query "Contents[?StorageClass=='GLACIER']" --output text | grep -E 'Marti/Sum data/Sum_' >> restore-txt
2.- 将文件下载到本机,可先上传到一个S3 bucket里,使用 aws s3 cp 命令
aws s3 cp ./glacier-restore.txt s3://Your-S3-Bucket/
下载下来后,将txt内容复制到excel,一栏放置bucket名,一栏放文件路径,然后保存成csv文件,如下图

3.- 将csv文件上传会S3 bucket,然后进入S3 Batch Operation创建job

指向csv文件



指定保存结果的S3路径

Permission建议根据这个提示创建一个新role

创建好后,需要手动触发 Run Job(新版本会自动跑)

完成后系统会报告结果

然后等待数个小时后,恢复的文件便可以从S3中下载了
有一次遇到一个奇怪的问题,job fail了,提示:
Reasons for failure
Unsupported encryption type SSE_KMS used for manifest

查询后发现原来是存放restore.csv的S3 bucket使用了自定义的key,后来将文件上传到其它bucket解决了。


1276

被折叠的 条评论
为什么被折叠?



