AWS CLI を使用して、S3 Glacier Flexible Retrieval または S3 Glacier Deep Archive ストレージクラスから Amazon S3 オブジェクトを復元するにはどうすればよいですか?

最終更新日: 2022 年 10 月 3 日

ライフサイクル設定を使用して、Amazon Simple Storage Service (Amazon S3) オブジェクトを Amazon S3 Glacier Flexible Retrieval (旧称 Glacier) または Amazon S3 Glacier Deep Archive ストレージクラスにアーカイブしました。AWS コマンドラインインターフェイス (AWS CLI) を使用してオブジェクトを復元する方法を教えてください。

解決方法

AWS CLI を使用して S3 Glacier Flexible Retrieval ストレージまたは S3 Glacier Deep Archive クラスから S3 オブジェクトを復元するには、以下の手順に従います。

注: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

復元リクエストを開始する

次のコマンドを実行して、復元リクエストを開始します。必ず、サンプルのコマンドのすべての値を実際のバケット、オブジェクト、復元リクエストの値に置き換えてください。

注意: データ取り出し料金はリクエストの数量に基づいているため、復元リクエストのパラメータが正しいことを確認してください。

$ aws s3api restore-object --bucket awsexamplebucket --key dir1/example.obj --restore-request '{"Days":25,"GlacierJobParameters":{"Tier":"Standard"}}'

このコマンドを実行すると、オブジェクトの一時的なコピーが、復元リクエストに指定されている期間中使用できるようになります。この例では、復元リクエストで指定された期間は 25 日で、復元階層は S3 Standard に設定されています。

コマンドに実行できる以下の変更に留意してください。

  • バージョン管理されているバケット内の特定のオブジェクトバージョンを復元するには、--version-id オプションを含めてから、対応するバージョン ID を指定します。
  • S3 Glacier Flexible Retrieval ストレージクラスでは、[Expedited]、[Standard]、または [Bulk] オプションを使用できます。ただし、S3 Glacier Deep Archive ストレージクラスでは、[Standard] または [Bulk] オプションしか使用できません。
  • この例で使用されている JSON 構文が原因で Windows クライアントにエラーが生じる場合は、復元リクエストを以下の構文に置き換えてください。
--restore-request Days=25,GlacierJobParameters={"Tier"="Standard"}

注意:オブジェクトが S3 Glacier インスタントリトリーブに保存されている場合、データの取得は瞬時に行われ、復元オペレーションは必要ありません。詳細については、「オブジェクトストレージクラス」を参照してください。

復元リクエストのステータスをモニタリングする

次のコマンドを実行して、復元リクエストのステータスをモニタリングします。

aws s3api head-object --bucket awsexamplebucket --key dir1/example.obj

コマンドを実行した後も復元が進行中の場合は、次のような応答が表示されます。

{
    "Restore": "ongoing-request=\"true\"",
    ...
    "StorageClass": "GLACIER | DEEP_ARCHIVE",
    "Metadata": {}
}

復元が完了すると、次のような応答を受け取ります。

{
    "Restore": "ongoing-request=\"false\", expiry-date=\"Sun, 13 Aug 2017 00:00:00 GMT\"",
    ...
    "StorageClass": "GLACIER | DEEP_ARCHIVE",
    "Metadata": {}
}

応答の expiry-date に留意してください。この時点までは、一時ストアオブジェクト (S3 Standard ストレージクラスに保存されています) にアクセスできます。一時オブジェクトは、S3 Glacier Flexible Retrieval または S3 Glacier Deep Archive ストレージクラスにあるアーカイブされたオブジェクトと一緒に使用できます。expiry-date を経過すると、一時オブジェクトが削除されます。一時オブジェクトの有効期限が切れる前に、オブジェクトのストレージクラスを変更する必要があります。expiry-date の後にオブジェクトのストレージクラスを変更するには、新しい復元リクエストを開始する必要があります。

オブジェクトのストレージクラスを Amazon S3 Standard に変更する

オブジェクトのストレージクラスを Amazon S3 Standard に変更するには、copy を使用します。既存のオブジェクトを上書きすることも、オブジェクトを別の場所にコピーすることもできます。

警告: AWS CLI のバージョン 1.x を使用している場合は、オブジェクトをコピーする前に、マルチパートしきい値が 5 GB に設定されていることを確認してください。設定しない場合、オブジェクトのサイズが AWS CLI のマルチパートしきい値よりも大きいと、オブジェクトのユーザーメタデータが失われます。5 GB を超えるオブジェクトについては、AWS CLI のバージョン 2.x を使用してユーザーメタデータを保持します。

(オプション) AWS CLI のマルチパートしきい値を引き上げるには、次のコマンドを実行します。

aws configure set default.s3.multipart_threshold 5GB

既存のオブジェクトを Amazon S3 Standard ストレージクラスで上書きするには、次のコマンドを実行します。

aws s3 cp s3://awsexamplebucket/dir1/example.obj s3://awsexamplebucket/dir1/example.obj --storage-class STANDARD

プレフィックス全体のために再帰的コピーを実行し、既存のオブジェクトを Amazon S3 Standard ストレージクラスで上書きするには、次のコマンドを実行します。

aws s3 cp s3://awsexamplebucket/dir1/ s3://awsexamplebucket/dir1/ --storage-class STANDARD --recursive --force-glacier-transfer

: S3 Glacier Flexible Retrieval にアーカイブされたオブジェクトの最小保存期間は 90 日です。S3 Glacier Deep Archive にアーカイブされたオブジェクトの最小保存期間は 180 日です。S3 Glacier Flexible Retrieval 内のオブジェクトを最小保存期間である 90 日前に上書きした場合、90 日間の料金が請求されます。同様に、S3 Glacier Deep Archive 内の、最小保存期間である 180 日前に上書きされたオブジェクトについても、180 日間の料金が課金されます。

オブジェクトを別の場所にコピーするには、次のコマンドを実行します。

aws s3 cp s3://awsexamplebucket/dir1/example.obj s3://awsexamplebucket/dir2/example2.obj

: 一時停止されたバケット、またはバージョニングが有効になっているバケットの場合、このステップではオブジェクトの追加コピーが作成されます。これらの追加オブジェクトには、ストレージコストもかかります。ストレージコストを回避するには、Amazon S3 Glacierr ストレージクラスにまだ残っている以前のバージョンを削除するか、S3 ライフサイクルの有効期限ルールを作成します。