多数の Amazon Simple Storage Service (Amazon S3) オブジェクトを復元したいです。その Amazon S3 オブジェクトは、Glacier Flexible Retrieval または Amazon S3 Glacier Deep Archive ストレージクラスにあります。
解決策
大量の Amazon S3 Glacier ストレージクラスのオブジェクトを復元するには、Amazon S3 Batch Operations またはカスタム AWS コマンドラインインターフェイス (AWS CLI) コマンドを使用します。
注: AWS CLI のコマンドの実行時にエラーが発生する場合は、「AWS CLI でのエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
S3 Batch Operations を使用する
S3 Batch Operations ジョブを作成し、すべてのオブジェクトを復元します。Restore ジョブは、オブジェクトのカスタムリストまたは Amazon S3 インベントリレポートに対して実行できます。
前提条件
Amazon S3 コンソールを使用してバッチオペレーションジョブを作成し、復元を開始するには、次の手順を実行します。
- Amazon S3 コンソールを開きます。
- ナビゲーションペインで [バッチオペレーション] を選択します。
- [ジョブの作成] を選択します。
- [リージョン] で、ジョブを作成する AWS リージョンを選択します。
- [マニフェストの選択] に次の内容を入力します。
[マニフェスト形式] では、ファイル形式として [S3 インベントリレポート] または [CSV] を選択します。
[マニフェストオブジェクトへのパス] にマニフェストファイルへの S3 パス (例: s3://awsexamplebucket/manifest.csv) を入力します。
- [次へ] を選択します。
- [操作の選択] に次の内容を入力します。
[操作] で [Restore] を選択します。
[ソースを復元] で [Glacier Flexible Retrieval] または [Glacier Deep Archive] を選択します。
[復元したコピーを使用できる日数] に日数を入力します。
[復元レベル] で、[一括取得] または [標準取得] を選択します。
注: S3 Batch Operations では、[高速] 取得レベルはサポートされません。
- [次へ] を選択します。
- [追加オプションの設定] に次の内容を入力します。
(オプション) [説明] に説明を入力します。
[優先度] にジョブの優先度を示す数値を入力します。
[完了レポートを生成] は選択したままにします。
[完了レポートの範囲] で [失敗したタスクのみ] または [すべてのタスク] を選択します。
[完了レポートの送信先へのパス] にレポートの送信先パスを入力します。
[アクセス許可] で、[既存の IAM ロールから選択] を選択し、必要なアクセス許可を持つ IAM ロールを選択します。
- [次へ] を選択します。
- [レビュー] ページでジョブの詳細を確認してから、[ジョブの作成] を選択します。
- ジョブを選択し、[確認して実行] を選択します。
- (オプション) [完了レポートを生成] を選択した場合は、ジョブの完了後にレポートを確認します。レポートは、[完了レポートの送信先へのパス] で指定したパスにあります。
各ジョブのステータスの説明については、「ジョブのステータス」を参照してください。
重要: Restore ジョブでは、オブジェクト復元のリクエストのみが開始されます。リクエストを開始すると、S3 Batch Operations はオブジェクトのジョブが完了したことを報告します。Batch Operation ジョブがオブジェクトを復元した後、Amazon S3 がジョブを更新したり、ユーザーに通知したりすることはありません。ただし、Amazon S3 イベント通知を使用することで、オブジェクトが Amazon S3 で使用可能になったときに通知を受け取ることができます。
失敗したジョブの詳細については、「ジョブの失敗を追跡する」を参照してください。
カスタム AWS CLI コマンドを使用する
AWS CLI コマンド restore-object を実行することで、Amazon S3 Glacier オブジェクトを復元できます。ただし、restore-object コマンドは一度に 1 つの S3 Glacier オブジェクトしか復元できず、一括復元アクションはサポートしていません。
S3 Glacier ストレージクラスから大量のデータを復元するには、お使いのオペレーティングシステム (OS) に応じて次のカスタムコマンドを使用します。
注: カスタムスクリプトを本番環境で使用する前に、本番環境でテストすることをおすすめします。オブジェクトが多すぎる場合、コマンドがタイムアウトする可能性があります。オブジェクトの数を減らすには、コマンドで Prefix パラメータを使用します。
Linux または Unix ベースのシステムでは、次の list-objects コマンドを実行し、バケット内のすべての S3 Glacier オブジェクトを復元します。
aws s3api list-objects --bucket bucket-name --prefix your-prefix --query 'Contents[?StorageClass==`GLACIER`][Key]' --output text | xargs -I {} sh -c "aws s3api restore-object --bucket bucket-name --key \"{}\" --restore-request Days=5,GlacierJobParameters={Tier=Standard} || true"
注: 実際のものでそれぞれ、bucket-name を S3 バケット名に、your-prefix を S3 フォルダパスに、StorageClass の値を GLACIER または DEEP_ARCHIVE に置き換えます。
Windows ベースのシステムでは、次の手順を実行します。
-
次の list-objects コマンドを実行し、バケット内のすべての S3 Glacier オブジェクトを一覧表示します。
aws s3api list-objects --bucket bucket-name --prefix your-prefix --query "Contents[?StorageClass==`GLACIER`][Key]" --output text > list.txt
オブジェクトのリストは、list.txt という名前のファイルに保存されます。
-
restore-object コマンドを実行して S3 Glacier オブジェクトを復元します。
for /F "tokens=*" %i in (list.txt) do @aws s3api restore-object --bucket bucket-name --key "%i" --restore-request Days=5,GlacierJobParameters={Tier=Standard} || true"
注: 上記のカスタム AWS CLI コマンドでは、リストとデータ取得リクエストに対して追加料金が発生します。list-objects-v2 API はページ分割操作なので、複数回 API コールを行うことで結果のデータセット全体を取得します。
関連情報
アーカイブ取得オプションについて
Batch Operations を使用してオブジェクト操作を実行する
S3 Batch Operations ジョブを管理する