削除マーカーの管理 - Amazon Simple Storage Service

削除マーカーの管理

期限切れの削除マーカーを自動的にクリーンアップするライフサイクルの設定

期限切れのオブジェクト削除マーカーは、すべてのオブジェクトバージョンが削除され、単一の削除マーカーだけが残っている場合のマーカーです。ライフサイクル設定が現行バージョンを削除するように設定されている、または ExpiredObjectDeleteMarker アクションが明示的に設定されている場合、Amazon S3 は期限切れのオブジェクト削除マーカーを削除します。例については、「バージョニングが有効なバケットで期限切れのオブジェクト削除マーカーを削除する」を参照してください。

古いバージョンを現行バージョンにするための削除マーカーの削除

バージョニングが有効なバケット内のオブジェクトを削除すると、すべてのバージョンがバケット内に残り、Amazon S3 はオブジェクトの削除マーカーを作成します。削除したオブジェクトを復元するには、この削除マーカーを削除する必要があります。バージョニングと削除マーカーの詳細については、「S3 バージョニングによる複数のバージョンのオブジェクトの保持」を参照してください。

削除マーカーを完全に削除するには、DeleteObject versionId リクエストにそのバージョン ID を含める必要があります。次の図は、DeleteObject versionId リクエストが削除マーカーを完全に削除する方法を示しています。

バージョン ID を使用した削除マーカーの削除を示す図

削除マーカーを削除すると、シンプルな GET リクエストがオブジェクトの現行バージョン ID (121212) を取得するようになります。

注記

現行バージョンが削除マーカーである場合に、削除マーカーのバージョン ID を指定せずに DeleteObject リクエストを使用すると、Amazon S3 は削除マーカーを削除せず、その代わりに別の削除マーカーを PUTs します。

NULL バージョン ID を持つ削除マーカーを削除するには、DeleteObject リクエストのバージョン ID として NULL を渡す必要があります。以下の図は、現行バージョンが削除マーカーになっているときに、バージョンID なしで実行されたシンプルな DeleteObject リクエストが何も削除せず、その代わりに一意のバージョン ID (7498372) を持つ削除マーカーをさらに追加する状況を示しています。

NULL バージョン ID を使用した削除マーカーの削除を説明する図

S3 バケットから削除されたフォルダ以外のオブジェクト (フォルダ内のオブジェクトも含む) を復元するには、以下の手順を実行します。

  1. AWS Management Console にサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

  2. [Buckets (バケット)] リストで、目的のバケットの名前を選択します。

  3. バケット内のオブジェクトのバージョン一覧を表示するには、[バージョンのリスト] を選択します。削除されたオブジェクトの削除マーカーを表示できます。

  4. 削除したオブジェクトを復元するには、削除マーカーを削除する必要があります。復元するオブジェクトの削除マーカーの横にあるチェックボックスを選択し、次に [削除] を選択します。

  5. [オブジェクトの削除] ページで削除を確認します。

    1. [オブジェクトを完全に削除しますか?] に、permanently delete と入力します。

    2. [オブジェクトの削除] を選択します。

注記

Amazon S3 コンソールでは、削除されたフォルダを元に戻すことはできません。AWS CLI または SDK を使用する必要があります。例については、AWS ナレッジセンターのバージョニングが有効なバケットで削除された Amazon S3 オブジェクトを取得する方法を教えてくださいを参照してください。

削除マーカーを完全に削除するには
  1. versionId を、削除する削除マーカーのバージョン ID に設定します。

  2. DELETE Object versionId リクエストを送信します。

例 - 削除マーカーの削除

次の例では、photo.gif のバージョン 4857693 の削除マーカーを削除します。

DELETE /photo.gif?versionId=4857693 HTTP/1.1 Host: bucket.s3.amazonaws.com Date: Wed, 28 Oct 2009 22:32:00 GMT Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=

削除マーカーを削除すると、Amazon S3 はレスポンスに以下を含めます。

204 NoContent x-amz-version-id: versionID x-amz-delete-marker: true

他の AWS SDK の使用の詳細については、「AWS デベロッパーセンター」を参照してください。

Python

次の Python コード例は、オブジェクトから削除マーカーを削除し、最新でないバージョン (最新に最も近いもの) をオブジェクトの最新のバージョンにする方法を示しています。

def revive_object(bucket, object_key): """ Revives a versioned object that was deleted by removing the object's active delete marker. A versioned object presents as deleted when its latest version is a delete marker. By removing the delete marker, we make the previous version the latest version and the object then presents as *not* deleted. Usage is shown in the usage_demo_single_object function at the end of this module. :param bucket: The bucket that contains the object. :param object_key: The object to revive. """ # Get the latest version for the object. response = s3.meta.client.list_object_versions( Bucket=bucket.name, Prefix=object_key, MaxKeys=1 ) if "DeleteMarkers" in response: latest_version = response["DeleteMarkers"][0] if latest_version["IsLatest"]: logger.info( "Object %s was indeed deleted on %s. Let's revive it.", object_key, latest_version["LastModified"], ) obj = bucket.Object(object_key) obj.Version(latest_version["VersionId"]).delete() logger.info( "Revived %s, active version is now %s with body '%s'", object_key, obj.version_id, obj.get()["Body"].read(), ) else: logger.warning( "Delete marker is not the latest version for %s!", object_key ) elif "Versions" in response: logger.warning("Got an active version for %s, nothing to do.", object_key) else: logger.error("Couldn't get any version info for %s.", object_key)