Amazon S3 Glacier からの復元後に一括ダウンロードする方法
結論
以下のコマンドで一括ダウンロードできました。
$ aws s3 cp s3://my-bucket-name/ ./ \
--recursive \
--force-glacier-transfer
経緯
Glacier からの一括ダウンロードするために以下のコマンドを実行したところ、エラーが発生しました。
$ aws s3 cp s3://my-bucket-name/ ./ \
--recursive \
warning: Skipping file s3://my-bucket-name/test.txt. Object is of storage class GLACIER. Unable to perform download operations on GLACIER objects. You must restore the object to be able to perform the operation. See aws s3 download help for additional parameter options to ignore or force these transfers.
エラーメッセージにも記載されている通り、Glacier からのダウンロードはできない仕様があるため、ダウンロード前にオブジェクトを復元する必要があります。
アーカイブされたオブジェクトの復元 - Amazon Simple Storage Service
これらのストレージクラスのオブジェクトにアクセスするには、指定された期間 (日数) の間、オブジェクトの一時コピーを S3 バケットに復元する必要があります。
そこで、まずはコンソールから復元を実行しました。

しかし、復元後もエラーが解消されませんでした。
エラーメッセージの分析
See aws s3 download help for additional parameter options to ignore or force these transfers.
上記エラーメッセージには強制を示唆する内容が含まれていたため、aws s3 cp コマンドのリファレンスを確認したところ、--force-glacier-transfer というオプションが存在することがわかりました。
cp — AWS CLI 2.34.27 Command Reference
--force-glacier-transfer (boolean) Forces a transfer request on all Glacier objects in a sync or recursive copy.
そこで、以下のコマンドを実行したところ、エラーが解消されました。
$ aws s3 cp s3://my-bucket-name/ ./ \
--recursive \
--force-glacier-transfer
なお、当初は --force-glacier-transfer ではなく --force のみでも実行できることを確認しましたが、パラメータの省略は非推奨であることがわかりました。
$ aws s3 cp s3://my-bucket-name/ ./ \
--recursive \
--force
AWS CLI のエラーのトラブルシューティング - AWS Command Line Interface
パラメータの省略形を意図的に使用しないでください。これらは信頼性が低く、下位互換性もありません。省略形の混乱を生じるような新しいパラメータをコマンドに追加すると、コマンドが壊れてしまいます。
まとめ
今回は Amazon S3 Glacier からの復元後に一括ダウンロードする方法を紹介しました。
どなたかの参考になれば幸いです。
Discussion