AWS CLI を使用して、S3 Glacier または S3 Glacier Deep Archive ストレージクラスから Amazon S3 オブジェクトを復元する方法を教えて下さい。

最終更新日: 2021 年 11 月 18 日

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

解決方法

AWS CLI を使用して Amazon S3 Glacier または 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 ストレージクラスでは、[Expedited]、[Standard]、または [Bulk] オプションを使用できます。ただし、S3 Glacier Deep Archive ストレージクラスには、[Standard] または [Bulk] オプションしか使用できません。
  • この例で使用されている JSON 構文が原因で Windows クライアントにエラーが生じる場合は、復元リクエストを以下の構文に置き換えてください。
--restore-request Days=25,GlacierJobParameters={"Tier"="Standard"}

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

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

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 Glacier または S3 Glacier Deep Archive ストレージクラスにあるアーカイブされたオブジェクトと一緒に使用できます。expiry-date が経過すると、一時オブジェクトが削除されます。一時オブジェクトの有効期限が切れる前に、オブジェクトのストレージクラスを変更する必要があります。expiry-date の後にオブジェクトのストレージクラスを変更するには、新しい復元リクエストを開始する必要があります。

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

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

警告: 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

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

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