¿Cómo recupero un objeto de Amazon S3 que eliminé en un bucket de uso general con control de versiones activado?
Quiero recuperar un objeto que he eliminado de mi bucket de uso general de Amazon Simple Storage Service (Amazon S3) que tiene activado el control de versiones.
Descripción corta
Nota: El control de versiones de S3 solo está disponible para buckets de uso general. Los buckets de directorio y tabla no admiten el control de versiones de S3.
Al eliminar un objeto de un bucket con el control de versiones activado, Amazon S3 crea un marcador de eliminación para el objeto. El marcador de eliminación se convierte en la versión actual del objeto y el objeto pasa a ser la versión anterior. Con un marcador de eliminación, Amazon S3 responde a las solicitudes del objeto como si se hubiera eliminado el objeto. Por ejemplo, si envías una solicitud GET para el objeto, Amazon S3 devuelve un error.
Para recuperar un objeto que se eliminó de un bucket con versión activada, haz lo siguiente:
- Descarga la versión anterior del objeto. Debes tener el permiso s3:GetObjectVersion.
- Utiliza una cuenta de AWS que tenga el permiso s3:DeleteObjectVersion para eliminar un marcador de eliminación. La versión no eliminada más reciente se convierte entonces en la versión actual del objeto para que puedas acceder al objeto eliminado anteriormente en un bucket versionado.
- Nota: Si has configurado la eliminación de la autenticación multifactor (MFA) en el bucket, debes usar la eliminación de MFA para eliminar el marcador de eliminación.
Resolución
Importante: No puedes recuperar los datos que eliminas de forma permanente de un bucket.
Uso de la consola de Amazon S3 para descargar la versión anterior del objeto
Sigue estos pasos:
- Abre la consola de Amazon S3.
- En el panel de navegación, elige Buckets y, a continuación, selecciona el bucket del objeto eliminado.
- Para ver una lista de las versiones del objeto, activa Mostrar versiones.
- Selecciona la versión del objeto eliminado que deseas recuperar.
- Selecciona Acciones y, a continuación, Descargar.
Uso de la AWS CLI para descargar la versión anterior del objeto
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI. En los siguientes comandos, sustituye DOC-EXAMPLE-BUCKET por el nombre de tu bucket.
Sigue estos pasos:
-
Ejecuta el comando list-object-versions para enumerar las versiones de los objetos:
aws s3api list-object-versions --bucket DOC-EXAMPLE-BUCKET --prefix examplefolder/Nota: El comando anterior incluye la opción --prefix para filtrar los resultados según el prefijo del nombre de clave especificado. Usa esta opción para reducir la cantidad de resultados cuando tu bucket contiene muchas versiones de objetos.
-
En el resultado del comando, anota el ID de versión de la versión anterior del objeto.
-
Ejecuta el comando get-object para recuperar la versión:
aws s3api get-object --bucket DOC-EXAMPLE-BUCKET --key example.txt --version-id example.d6tjAKF1iObKbEnNQkIMPjj filename.txt
Uso de la consola de Amazon S3 para eliminar el marcador de eliminación
Sigue estos pasos:
- Desde la cuenta que posee el bucket del objeto eliminado, abre la consola de Amazon S3.
- En el panel de navegación, elige Buckets y, a continuación, selecciona el bucket del objeto eliminado.
- Para ver una lista de las versiones del objeto, activa Mostrar versiones.
- Selecciona el marcador de eliminación del objeto.
Importante: Asegúrate de seleccionar el marcador de eliminación y no el objeto en sí. De lo contrario, no podrás recuperar el objeto. - En la página Eliminar objetos, en ¿Eliminar objetos de forma permanente?, escribe Eliminar de forma permanente.
- Selecciona Eliminar.
Importante: No puedes usar la consola de Amazon S3 para recuperar carpetas. En su lugar, debes usar la AWS CLI o AWS SDK.
Uso de la AWS CLI para eliminar el marcador de eliminación
Puedes usar la AWS CLI para eliminar el marcador de eliminación en varios objetos, miles de objetos o millones de objetos.
Eliminación del marcador de eliminación en varios objetos
Sigue estos pasos:
-
Ejecuta el siguiente comando list-object-versions con el parámetro --query:
aws s3api list-object-versions --bucket DOC-EXAMPLE-BUCKET --prefix examplefolder/ --query 'DeleteMarkers[*].{Key: Key, VersionId: VersionId}'Nota: El comando del ejemplo anterior incluye la opción --prefix para filtrar los resultados según el prefijo del nombre de clave especificado.
-
En el resultado del comando, anota el ID de versión del marcador de eliminación.
Importante: Asegúrate de haber anotado el ID de versión del marcador de eliminación. Si eliminas una versión de objeto, no puedes recuperar el objeto. -
Ejecuta el comando delete-object para eliminar el marcador de eliminación:
aws s3api delete-object --bucket DOC-EXAMPLE-BUCKET --key example.txt --version-id 'example.d6tjAKF1iObKbEnNQkIMPjj' -
Para comprobar que se ha eliminado el marcador de eliminación, ejecuta el comando ls:
aws s3 ls s3://DOC-EXAMPLE-BUCKET
Eliminación del marcador de eliminación en miles de objetos
Advertencia: Se recomienda hacer una copia de seguridad de los datos antes de ejecutar el siguiente comando list-object-versions. El comando usa la acción de la API s3api delete-object para eliminar los objetos identificados de los marcadores de eliminación. La eliminación de objetos es una acción permanente. Las modificaciones de esta estructura de comandos pueden provocar una pérdida inesperada de datos.
Sigue estos pasos:
- Abre la consola de AWS CloudShell.
- Ejecuta el comando list-object-versions:
Nota: El comando anterior usa la herramienta jq para analizar la respuesta ListObjectVersions para la versión actual de DeleteMarkers. De forma predeterminada, jq está instalado en AWS CloudShell. Si no interactúas con el entorno del shell, la sesión del shell finaliza. Para obtener más información sobre la herramienta jq, consulta ./jq en el sitio web de jq.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
Eliminación del marcador de eliminación en millones de objetos
Para eliminar el marcador de eliminación en millones de objetos de un bucket, utiliza un script personalizado con AWS SDK. Para obtener más información, amplía la pestaña Uso de los AWS SDK.
Nota: Cuando ejecutas list-object-versions en un bucket que tiene millones de objetos, es posible que se agote el tiempo de espera.
- Temas
- Storage
- Etiquetas
- Amazon Simple Storage Service
- Idioma
- Español

Contenido relevante
- preguntada hace 7 meses
- preguntada hace un año
- preguntada hace 7 meses
- preguntada hace 7 meses
OFICIAL DE AWSActualizada hace 2 años
OFICIAL DE AWSActualizada hace 8 meses