Gestión de marcadores de eliminación - Amazon Simple Storage Service

Gestión de marcadores de eliminación

Configuración del ciclo de vida para limpiar automáticamente los marcadores de eliminación vencidos

Un marcador de eliminación de objetos vencido es aquel en el que se eliminan todas las versiones de objetos y solo queda un único marcador de eliminación. Si la configuración de ciclo de vida está definida para eliminar las versiones actuales, o la acción ExpiredObjectDeleteMarker se ha establecido explícitamente, Amazon S3 borra el marcador de eliminación del objeto vencido. Para ver un ejemplo, consulte Eliminación de marcadores de eliminación de objetos vencidos en un bucket con control de versiones habilitado.

Borre marcadores de eliminación para convertir una versión anterior en una actual

Cuando se elimina un objeto en un bucket con control de versiones activado, todas las versiones permanecen en el bucket y Amazon S3 crea un marcador de eliminación para el objeto. Para anular la eliminación del objeto, debe eliminar este marcador de eliminación. Para obtener más información acerca del control de versiones y los marcadores de eliminación, consulte Retención de varias versiones de objetos con Control de versiones de S3.

Para eliminar permanentemente un marcador de eliminación, se debe incluir el ID de versión en una solicitud DeleteObject versionId. En el siguiente gráfico se muestra cómo una solicitud DeleteObject versionId elimina permanentemente un marcador de eliminación.

Ilustración que muestra la eliminación de un marcador de eliminación utilizando su ID de versión.

Al borrar el marcador de eliminación, ahora una solicitud GET simple devuelve el ID de versión actual (121212) del objeto.

nota

Si usa una solicitud DeleteObject para borrar un marcador de eliminación (sin especificar el ID de versión del marcador de eliminación), Amazon S3 no borra el marcador de eliminación, sino que PUTs (inserta) un nuevo marcador de eliminación.

Para borrar un marcador de eliminación con un ID de versión NULL, se debe pasar el NULL como el ID de versión en la solicitud DeleteObject. En la siguiente figura, se muestra cómo una solicitud DeleteObject simple realizada sin un ID de versión donde la versión actual es un marcador de eliminación, no elimina nada, sino que agrega un marcador de eliminación adicional con un ID de versión único (7498372).

Ilustración que muestra la eliminación de un marcador de eliminación utilizando su ID de versión NULL.

Siga los pasos siguientes para recuperar objetos eliminados que no son carpetas del bucket de S3, incluidos los objetos que se encuentran dentro de esas carpetas.

  1. Inicie sesión en la AWS Management Console y abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.

  2. En la lista Buckets (Buckets), elija el nombre del bucket en cuestión.

  3. Para ver una lista de las versiones de los objetos en el bucket, elija el modificador List versions (Listar versiones). Podrá ver los marcadores de eliminación de los objetos eliminados.

  4. Para anular la eliminación de un objeto, debe eliminar su marcador de eliminación. Marque la casilla de verificación que aparece junto al delete marker (marcador de eliminación) del objeto que desee recuperar y, a continuación, elija Delete (Eliminar).

  5. Confirme la eliminación en la página Delete objects (Eliminar objetos) .

    1. Para Permanently delete objects? (¿Eliminar objetos de forma permanente?), ingrese permanently delete.

    2. Elija Delete objects (Eliminar objetos).

nota

No puede usar la consola de Amazon S3 para anular la eliminación de carpetas. Debe utilizar la AWS CLI o el SDK. Para ver ejemplos, consulte ¿Cómo puedo recuperar un objeto de Amazon S3 que se eliminó en un bucket con control de versiones habilitado? en el Centro de conocimientos de AWS.

Para eliminar permanentemente un marcador de eliminación:
  1. Establezca el parámetro versionId según el ID de la versión del marcador de eliminación que quiera eliminar.

  2. Envíe una solicitud DELETE Object versionId.

ejemplo — Eliminar un marcador de eliminación

En el siguiente ejemplo se elimina el marcador de eliminación para la versión 4857693 de photo.gif.

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=

Al eliminar un marcador de eliminación, Amazon S3 incluye en la respuesta:

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

Para obtener información acerca del uso de otros SDK de AWS, consulte el Centro de desarrolladores de AWS.

Python

En el siguiente ejemplo de código de Python, se muestra cómo quitar un marcador de eliminación de un objeto y, por lo tanto, hacer que la versión no actual más reciente sea la versión actual del objeto.

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)