S3のGlacierストレージクラスにバックアップしていたデータをダウンロードするためのスクリプトを書きました。以下のようなたくさんのファイルをダウンロードするのに向いてます。
ハマりどころとしては、AWSにはAmazon GlacierというS3のGlacierストレージクラスと同じような独立サービスがあったところです。
この両者はファイルやAPIの取り扱いが異なるため、正しい情報を見つけるのに大変苦労しました。
ではいってみましょう。
環境
- Windows10
- Python3.5.2
- boto3
- aws-cli1.11.70
事前準備
今回のスクリプトはawscliがインストールされている前提です。まだインストールされていない方はあらかじめインストールとアカウントの設定を済ませてください。
AWS コマンドラインインターフェイス
またAWSのAPIを利用するためAWS SDK for Python (Boto3)を利用しています。pipでインストールできます。
手順
- S3のAPIでダウンロードしたいファイルに対してrestoreのリクエストを出す
- 一定時間ごとにポーリングしてrestoreリクエストの処理が終わっていたらファイルをダウンロードする
コード
コードはこんな感じです。
使い方
使う時にはTARGET_DIR
かTARGET_FILE
にダウンロードしたいディレクトリ、もしくはファイルの情報を記載して下さい。もしディレクトリごとダウンロードする場合はTARGET_TYPE
をDIR
に、ファイルをダウンロードする場合はTARGET_TYPE
をFILE
としてください。両方同時に指定することはできません。
また上記のスクリプトではPOLLING_TIME
が7200秒、すなわち2時間に指定されています。Glacierはだいたい4時間でrestoreが完了するので、restoreリクエスト出す→一回ポーリングを空振る→二回目のポーリングでダウンロード完了
となります。空振るのが嫌であればPOLLING_TIME
を14400以上にすることをお勧めします。
注意事項
Glacierからの復元については料金設計に重要なポイントがあります。具体的にはリンク先を読んでいただければと思いますが、くれぐれもご注意ください。
Amazon Glacierでクラウド破産しないために
なお、今回紹介したスクリプトの使用は自己責任でお願いします。これを利用した方が何かしらの損失を被っても責任を負いかねますのであらかじめご了承ください。
参考
以上です。