Amazon Simple Storage Service (Amazon S3) Glacier または Amazon S3 Glacier Deep Archive ストレージクラスに多数のオブジェクトがあります。大規模なオペレーションでこれらすべてのオブジェクトの復元を開始したいと考えています。
解決方法
大量の Amazon S3 Glacier ストレージクラスオブジェクトを復元する場合、次のいずれかのオプションを使用できます。
- Amazon S3 バッチオペレーション
- AWS コマンドラインインターフェイス (AWS CLI) を使用して作成したカスタムスクリプト
注: AWS CLI コマンドを実行する際にエラーが発生する場合は、AWS CLI の最新バージョンを使用しているか確認してください。
S3 バッチオペレーションを使用する
Amazon S3 バッチオペレーションジョブを作成して、すべてのオブジェクトの復元を開始します。S3 オブジェクトの復元の開始のジョブは、オブジェクトのカスタムリストまたは Amazon S3 インベントリレポートで実行できます。
注: ジョブを作成する前に、Amazon S3 バッチオペレーションの料金を必ず確認してください。
S3 バッチオペレーションジョブの作成を開始する前に、次の要件を満たしていることを確認してください。
- 復元を開始する権限を持つ AWS Identity and Access Management (IAM) ユーザーまたはロールがある。さらに、IAM ユーザーまたはロールには Amazon S3 バッチオペレーションに関する信頼ポリシーが必要です。
- 復元するオブジェクトのマニフェストとして使用する CSV リストまたは Amazon S3 インベントリレポートがある。マニフェストファイルは S3 バケットに保存する必要があります。サーバー側の暗号化 (顧客提供のキーまたは AWS Key Management Service キー) によるマニフェストはサポートされていません。各形式の要件の詳細については、「マニフェストの指定」を参照してください。
Amazon S3 コンソールを使用して復元を開始するバッチオペレーションジョブを作成するには、以下の手順を実行します。
- Amazon S3 コンソールを開きます。
2. ナビゲーションペインから、[バッチオペレーション] を選択します。
3. [ジョブの作成] を選択します。
4. [リージョン] で、ジョブを作成する AWS リージョンを選択します。
5. [マニフェストの選択] で、次のように入力します。
[マニフェスト形式] では、ファイル形式として [S3 インベントリレポート] または [CSV] を選択します。
[マニフェストオブジェクトへのパス] に、マニフェストファイルへの S3 パス (例: s3://awsexamplebucket/manifest.csv) を入力します。
6. [次へ] を選択します。
7. [オペレーションの選択] で、次のように入力します。
[オペレーション] で [復元] を選択します。
[ソースを復元] で [Glacier] または [Glacier Deep Archive] を選択します。
[復元したコピーが利用可能な日数] に、ユースケースに応じた日数を入力します。
[復元層] で、[一括取り出し] または [標準取り出し] のいずれかを選択します。各階層の詳細については、「アーカイブの取り出しオプション」を参照してください。
注: S3 バッチオペレーションでは迅速取り出し階層をサポートしていません。
8. [次へ] を選択します。
9. [追加オプションの設定] で、次のように入力します。
[説明] には、ジョブの説明を入力できます。このフィールドは空白のままにすることもできます。
[優先度] に、ジョブの優先度を示す数字を入力します。
[完了レポートを生成] は選択したままにします。
[完了レポートの範囲] では、ユースケースに応じて [失敗したタスクのみ] または [すべてのタスク] を選択します。
[完了レポートの送信先へのパス] に、レポートの送信先のパスを入力します。
[権限] で、[既存の IAM ロールから選択] を選択します。次に、復元を開始する権限があり、S3 バッチオペレーションの信頼ポリシーを持つ IAM ロールを選択します。
10. [次へ] を選択します。
11. [確認] ページで、ジョブの詳細を確認します。次に、[ジョブの作成] を選択します。
12. ジョブを作成すると、ジョブのステータスが [新規] から [準備中] に変わります。その後、ステータスが [確認待ち] に変わります。ジョブを実行するには、ジョブを選択して [確認して実行] を選択する必要があります。確認するまでジョブは実行されません。
13. (オプション) [完了レポートを生成] を選択した場合は、ジョブの完了後にレポートを確認します。レポートは、[完了レポートの送信先へのパス] で指定したパスにあります。
各ジョブのステータスの説明については、「ジョブのステータス」を参照してください。
失敗したジョブの詳細については、「ジョブの失敗の追跡」を参照してください。
カスタム AWS CLI スクリプトを使用する
AWS CLI の restore-object コマンドを使用して Amazon S3 Glacier オブジェクトを復元できます。ただし、このコマンドは一度に 1 つの S3 Glacier オブジェクトしか復元できず、一括復元アクションはサポートしていません。そのため、使用可能な取り出しオプションを使用して S3 Glacier ストレージクラスから大量のデータを復元するには、次の独自の解決策を使用してください。
注: これらのカスタムスクリプトは、運用環境で使用する前に、テスト環境または開発環境でテストしてください。このカスタムコマンドは、S3 Glacier ストレージクラスのすべてのオブジェクトを 1 つずつ復元します。オブジェクトの数が非常に多い場合、コマンドがタイムアウトする可能性があります。Prefix パラメータを使用してカスタムコマンドを実行すると、オブジェクトの数を絞り込むことができます。
Linux または UNIX ベースのシステムの場合、次のコマンドを実行して、バケット内のすべての S3 Glacier オブジェクトを再帰的に復元します。
aws s3api list-objects --bucket <bucket-name> --prefix <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 バケット名に置き換えてください。
- <prefix> を S3 フォルダのパスに置き換えてください。
Windows ベースのシステムの場合は、次の手順を行います。
1. 次のコマンドを実行して、バケット内のすべての S3 Glacier オブジェクトを一覧表示します。
aws s3api list-objects --bucket <bucket-name> --prefix <prefix> --query "Contents[?StorageClass==`GLACIER`][Key]" --output text > list.txt
このコマンドを実行すると、オブジェクトのリストが list.txt という名前のファイルに保存されます。
2. 次のコマンドを実行して 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 とデータ取り出しリクエストに追加料金がかかります。list-objects-v2 はページ分割操作であるため、結果のデータセット全体の取り出しに複数の API 呼び出しが発行される場合があります。詳細については、「Amazon S3 の料金表」を参照してください。
関連情報
S3 バッチオペレーションジョブの作成
Amazon S3 オブジェクトに対する大規模なバッチオペレーションの実行
S3 バッチオペレーションジョブの管理