バージョニングが有効になっているバケットで削除された Amazon S3 オブジェクトを取得するにはどうすればよいですか?
バージョニングが有効になっている Amazon Simple Storage Service (Amazon S3) バケットから削除されたオブジェクトを取得したいと考えています。
簡単な説明
バージョニング対応のバケットからオブジェクトを削除すると、Amazon S3 はそのオブジェクトの削除マーカーを作成します。削除マーカーを付けたオブジェクトがオブジェクトの現行のバージョンになり、元のオブジェクトが以前のバージョンになります。削除マーカーを使用すると、Amazon S3 はオブジェクトが削除されたかのようにオブジェクトのリクエストに応答します。例えば、オブジェクトの GET リクエストを送信すると、Amazon S3 はエラーを返します。
バージョニング対応のバケットから削除されたオブジェクトは、次のいずれかの方法で取得できます。
- 以前のバージョンのオブジェクトをダウンロードする: 以前のバージョンのオブジェクトをダウンロードするには、s3: GetObjectVersion に対するアクセス許可が必要です。
- 削除マーカーを削除する: 削除マーカーを削除すると、元のオブジェクトがオブジェクトの現行のバージョンになります。削除マーカーを削除するには、**s3: DeleteObjectVersion ** へのアクセス許可が必要です。また、バケットを所有または作成した AWS アカウントを使用して削除マーカーを削除する必要があります。
**注:**バケットに MFA delete configured がある場合、指定された多要素認証 (MFA) を使用して削除マーカーを削除する必要があります。
解決策
**重要:**バケットから完全に削除したデータを復元することはできません。
オブジェクトの以前のバージョンを復元するには、次のタスクを実行します。各コマンドで、DOC-EXAMPLE-BUCKET を自分のバケットの名前に置き換えます。
Amazon S3 コンソールを使用してオブジェクトの以前のバージョンをダウンロードする
Amazon S3 コンソールを使用してオブジェクトの以前のバージョンをダウンロードするには、次の手順を実行します。
- Amazon S3 コンソールを開きます。
- バケットのリストから、削除されたオブジェクトのバケットを開きます。
- 削除されたオブジェクトのフォルダに移動します。
- バージョンを表示をオンにします。
- 検索バーに、削除したオブジェクトの名前を入力します。
- オブジェクトの以前のバージョンを選択します。削除マーカーは選択しないでください。
- アクションを選択してから、ダウンロードを選択します。
AWS CLI を使用して、オブジェクトの以前のバージョンをダウンロードする
**注:**AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
AWS CLI を使用してオブジェクトの以前のバージョンをダウンロードするには、次のステップを実行します。
- バケットで list-object-versions コマンドを実行します。
注: 前述のコマンド例には、指定されたキー名プレフィックスに結果をフィルタリングする --prefix オプションが含まれています。このオプションは結果の数を減らすのに役立ち、バケットに大量のオブジェクトバージョンが含まれている場合は時間を短縮できます。aws s3api list-object-versions --bucket DOC-EXAMPLE-BUCKET --prefix examplefolder/
- コマンド出力から、オブジェクトの以前のバージョン ID をコピーします。
- コピーしたバージョン ID に対して get-object コマンドを実行します。
aws s3api get-object --bucket DOC-EXAMPLE-BUCKET --key example.txt --version-id example.d6tjAKF1iObKbEnNQkIMPjj filename.txt
Amazon S3 コンソールを使用して削除マーカーを削除する
Amazon S3 コンソールを使用して削除マーカーを削除するには、次の手順を実行します。
- 削除されたオブジェクトのバケットを所有するアカウントから、Amazon S3 コンソールを開きます。
- バケットのリストから、削除されたオブジェクトのバケットを開きます。
- 削除されたオブジェクトのフォルダに移動します。
- バージョンを表示をオンにします。
- 検索バーに、削除したオブジェクトの名前を入力します。
- オブジェクトの削除マーカーを選択します。
**重要:**削除マーカーを選択したことを確認してください。オブジェクトバージョンは一度削除すると、再び取得できなくなります。 - 削除を選択します。
- オブジェクトの削除ページで、正しい削除マーカーが一覧表示されていることを確認します。次に、permanently delete と入力して削除を確定します。
- オブジェクトを削除を選択します。
重要: Amazon S3 コンソールを使用してフォルダの削除を取り消すことはできません。これを行うには、AWS CLI または AWS SDK を使用する必要があります。
AWS CLI を使用して削除マーカーを削除する
AWS CLI を使用して、複数のオブジェクト、数千のオブジェクト、または数百万のオブジェクトの削除マーカーを削除できます。
**複数のオブジェクトの削除マーカーを削除する **
複数のオブジェクトの削除マーカーを削除するには、次の手順を実行します。
-
次の --query パラメーターを使用して list-object-versions コマンドを実行します。
aws s3api list-object-versions --bucket DOC-EXAMPLE-BUCKET --prefix examplefolder/ --query 'DeleteMarkers[?IsLatest==`true`]'
注: 前述のサンプルコマンド例には、**--prefix ** オプションが含まれており、指定されたキー名のプレフィックスに結果をフィルタリングします。
-
コマンド出力から、削除マーカーのバージョン ID をコピーします。
重要: 削除マーカーのバージョン ID をコピーしたことを確認してください。オブジェクトバージョンは一度削除すると、再び取得できなくなります。 -
コピーしたバージョン ID に対して delete-object コマンドを実行します。
aws s3api delete-object --bucket DOC-EXAMPLE-BUCKET --key example.txt --version-id 'example.d6tjAKF1iObKbEnNQkIMPjj'
-
削除マーカーが削除されたことを確認するには、ls コマンドを実行します。
aws s3 ls s3://DOC-EXAMPLE-BUCKET
何千ものオブジェクトの削除マーカーを削除する
何千ものオブジェクトの削除マーカーを削除するには、次の手順を実行します。
- AWS CloudShell コンソールを開きます。
- list-object-versions コマンドを実行します。
aws s3api list-object-versions --bucket DOC-EXAMPLE-BUCKET --prefix examplefolder/ --output json --query 'DeleteMarkers[?IsLatest==`true`].[Key, VersionId]' | jq -r '.[] | "--key " + "'\\\"'" + .[0] + "'\\\"'" + " --version-id " + .[1]' | xargs -L1 -t aws s3api delete-object --bucket DOC-EXAMPLE-BUCKET
**注:**前述のコマンド例では、GitHub Web サイトの jq ツールを使用して、現行のバージョンの DeleteMarkersの ListObjectVersions 応答を解析します。デフォルトでは、jq は AWS CloudShell にインストールされます。シェル環境と対話しない場合、シェルセッションは終了します。
何百万ものオブジェクトの削除マーカーを削除する
バケット内の何百万ものオブジェクトの削除マーカーを削除するには、AWS SDK でカスタムスクリプトを使用します。詳細については、古いバージョンを現行バージョンにするための削除マーカーの削除の AWS SDK の使用を参照してください。
**注:数百万のオブジェクトを含むバケットに対して ** LIST 呼び出しを実行すると、負荷が高くなり、タイムアウトの原因となる可能性があります。
関連するコンテンツ
- 質問済み 6年前lg...
- 質問済み 6年前lg...
- 質問済み 5年前lg...
- AWS公式更新しました 2年前
- AWS公式更新しました 4年前
- AWS公式更新しました 8ヶ月前