How to restore folders (or entire buckets) to Amazon S3 from Glacier?
I changed the lifecycle for a bunch of my buckets on Amazon S3 so their storage class was set to Glacier. I did this using the online AWS Console. I now need those files again.
I know how to restore them back to S3 per file. But my buckets have thousands of files. I wanted to see if there was a way to restore the entire bucket back to S3, just like there was a way to send the entire bucket to Glacier?
I'm guessing there's a way to program a solution. But I wanted to see if there was a way to do it in the Console. Or with another program? Or something else I might be missing?
Solution 1:
If you use s3cmd
you can use it to restore recursively pretty easily:
s3cmd restore --recursive s3://mybucketname/
I've also used it to restore just folders as well:
s3cmd restore --recursive s3://mybucketname/folder/
Solution 2:
If you're using the AWS CLI tool (it's nice, you should), you can do it like this:
aws s3 ls s3://<BUCKET_NAME> --recursive | awk '{print $4}' | xargs -L 1 aws s3api restore-object --restore-request '{"Days":<DAYS>,"GlacierJobParameters":{"Tier":"<TIER>"}}' --bucket <BUCKET_NAME> --key
Replace <BUCKET_NAME>
with the bucket name you want and provide restore parameters <DAYS>
and <TIER>
.
<DAYS>
is the number of days you want to restore the object for and <TIER>
controls the speed of the restore process and has three levels: Bulk, Standard, or Expedited: