管理刪除標記 - Amazon Simple Storage Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

管理刪除標記

設定生命週期以自動清除過期的刪除標記

過期的物件刪除標記是刪除所有物件版本的標記,且僅保留單一刪除標記。如果生命週期組態設定為刪除目前版本,或明確設定 ExpiredObjectDeleteMarker 動作,則 Amazon S3 會移除過期物件的刪除標記。如需範例,請參閱 範例 7:移除過期物件刪除標記

移除刪除標記,使舊版本成為目前版本

當您在已啟用版本控制的儲存貯體中刪除物件時,所有版本都會保留在儲存貯體中,而 Amazon S3 會為該物件建立刪除標記。若要取消刪除物件,您必須刪除此刪除標記。如需版本控制與刪除標記的詳細資訊,請參閱「在 S3 儲存貯體中使用版本控制」。

若要對刪除標記永久刪除,您必須在 DeleteObject versionId 要求中包含其版本 ID。下圖顯示 DeleteObject versionId 要求如何永久移除刪除標記。

移除刪除標記的效果是簡單的 GET 請求現在會擷取物件的目前版本 ID (121212)。

注意

如果您使用 DeleteObject 請求,其中目前版本為刪除標記 (不指定刪除標記的版本 ID),則 Amazon S3 不會刪去刪除標記,而是 PUTs 另一個刪除標記。

若要刪除具有 NULL 版本 ID 的刪除標記,必須在 DeleteObject 請求中作為版本 ID 傳遞 NULL。下圖顯示了如何作出沒有版本 ID 的簡單 DeleteObject 請求,其中目前版本為刪除標記,不會刪除任何內容,而是添加一個具有唯一版本 ID (7498372) 的額外刪除標記。

使用下列步驟,從 S3 儲存貯體中復原不是資料夾的已刪除物件,包括這些資料夾內的物件。

  1. 登入 AWS Management Console 並開啟 Amazon S3 主控台,網址為 https://console.aws.amazon.com/s3/

  2. Buckets (儲存貯體) 清單中,選擇您所需的儲存貯體名稱。

  3. 若要查看儲存貯體中的物件版本清單,請選擇 List versions (列出版本) 切換開關。您將可以查看已刪除物件的刪除標記。

  4. 若要取消刪除物件,您必須刪除刪除標記。選取刪除標記旁的核取方塊以復原物件,然後選擇 Delete (刪除)。

  5. Delete objects (刪除物件) 頁面上確認刪除。

    1. 對於 Permanently delete objects? (永久刪除物件?),輸入 permanently delete

    2. 選擇 Delete objects (刪除物件)。

注意

您無法使用 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

如需如何建立及測試工作範例的說明,請參閱「使用 AWS SDK for Python (Boto)」。

下列 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)