一度Glacierアーカイブ化したS3オブジェクトを階層を追いながらWeb上の画面から復元していくのはけっこう辛い。コマンドラインから一気に復元実行できると良い。
方法
公式の aws-cli とは別に、非公式の s3cmd というツールがあり、これを用いるととても楽である。
s3cmd インストール・設定
$ sudo yum -y install s3cmd
$ s3cmd --configure
…
Access Key: xxxxxx ← 入力
Secret Key: xxxxxx ← 入力
…
Save settings? [y/N] y ← 入力
s3cmd によるフォルダまるごと復元
以下のようにすれば folder1 配下をまるごと復元してくれる。(有効期限3日)
$ s3cmd restore --recursive --restore-days=3 s3://bucket-name/folder1/
以下のようにすればバケットまるごと復元してくれる。(有効期限3日)
$ s3cmd restore --recursive --restore-days=3 s3://bucket-name/
s3cmd によるフォルダまるごとダウンロード
復元が完了したら、以下のようなコマンドでフォルダまるごとダウンロードできる
$ s3cmd get -r s3://bucket-name/folder1/ .
s3cmd による再帰的復元が途中で中断される場合
既に復元を開始しているアイテムが1個でもフォルダ内に含まれていると、「Object restore is already in progress」というエラーとなり、フォルダまるごとの復元が中断されるようでした。
以下プルリクエストにて該当エラーをスキップする処理を入れてみたので、同様の問題で困った場合には試してみると良いです。
参考
-
aws-cli - まとめてGlacierからS3に戻すためのワンライナー - Qiita
- 参考になりました。最初はこちらを試してみたのですが、速度がやや遅かったので一旦使用を断念。
-
How to restore folders (or entire buckets) to Amazon S3 from Glacier? - Stack Overflow
- s3cmd の紹介があり、これを試してみることにしました。
-
s3tools/s3cmd
- s3cmd リポジトリ。