Solucionar problemas de control de versiones - Amazon Simple Storage Service

Solucionar problemas de control de versiones

Los siguientes temas pueden ayudarlo a solucionar problemas habituales de control de versiones de Amazon S3.

Quiero recuperar objetos que se han eliminado por error en un bucket con el control de versiones activado

En general, cuando se eliminan versiones de objetos de los buckets de S3, Amazon S3 no puede recuperarlas. Sin embargo, si has activado el control de versiones de S3 en el bucket de S3, una solicitud DELETE que no especifique un ID de versión no puede eliminar un objeto de forma permanente. En su lugar, se añade un marcador de eliminación como marcador de posición. El marcador de eliminación se convierte en la versión actual del objeto.

Para comprobar si los objetos eliminados se eliminan de forma permanente o temporal (con un marcador de eliminación en su lugar), haga lo siguiente:

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

  2. En el panel de navegación izquierdo, elija Instancias.

  3. En la lista Buckets (Buckets), elija el nombre del bucket que contiene el objeto.

  4. En la lista Objetos, active la opción Mostrar versiones a la derecha de la barra de búsqueda y, a continuación, busque el objeto eliminado en la barra de búsqueda. Esta opción solo está disponible si el control de versiones ya estaba activado anteriormente en el bucket.

    También puede usar Inventario de S3 para buscar objetos eliminados.

  5. Si no encuentra el objeto después de seleccionar Mostrar versiones o crear un informe de inventario, y tampoco encuentra un marcador de eliminación del objeto, la eliminación será permanente y no podrá recuperar el objeto.

También puede verificar el estado de un objeto eliminado mediante la operación de la API HeadObject de la AWS Command Line Interface (AWS CLI). Para ello, el comando head-object siguiente y sustituya user input placeholders con su información:

aws s3api head-object --bucket example-s3-bucket --key index.html

Si ejecuta el comando head-object en un objeto versionado cuya versión actual es un marcador de eliminación, aparecerá un error 404 No encontrado. Por ejemplo:

Se ha producido un error (404) al llamar a la operación HeadObject: No encontrada

Si ejecuta el comando head-object en un objeto versionado y proporciona el ID de versión del objeto, Amazon S3 recupera los metadatos del objeto y confirma que el objeto sigue existiendo y no se ha eliminado de forma permanente.

aws s3api head-object --bucket example-s3-bucket --key index.html --version-id versionID

{
"AcceptRanges": "bytes",
"ContentType": "text/html",
"LastModified": "Thu, 16 Apr 2015 18:19:14 GMT",
"ContentLength": 77,
"VersionId": "Zg5HyL7m.eZU9iM7AVlJkrqAiE.0UG4q",
"ETag": "\"30a6ec7e1a9ad79c203d05a589c8b400\"",
"Metadata": {}
}

Si encuentra el objeto y la versión más reciente es un marcador de eliminación, la versión anterior del objeto seguirá existiendo. Como el marcador de eliminación es la versión actual del objeto, puede recuperarlo borrando el marcador de eliminación.

Tras eliminar permanentemente el marcador de eliminación, la segunda versión más reciente del objeto pasa a ser la versión actual del objeto, lo que hace que el objeto vuelva a estar disponible. Para obtener una representación visual de cómo se recuperan los objetos, consulte Borrar marcadores de eliminación.

Para quitar una versión específica de un objeto, debe ser el propietario del bucket. Para eliminar permanentemente un marcador de eliminación, se debe incluir el ID de versión en una solicitud DeleteObject. Para borrar el marcador de eliminación, use el siguiente comando y sustituya user input placeholders con su información:

aws s3api delete-object --bucket example-s3-bucket --key index.html --version-id versionID

Para obtener más información sobre el comando delete-object, consulte delete-object en la Referencia de comandos de la AWS CLI. Para obtener más información acerca de cómo eliminar marcadores de eliminación de forma permanente, consulte Gestión de marcadores de eliminación.

Quiero eliminar los objetos versionados de forma permanente

En un bucket con control de versiones, una solicitud DELETE sin un ID de versión no puede eliminar un objeto de forma permanente. En cambio, dicha solicitud inserta un marcador de eliminación.

Para eliminar objetos versionados de forma permanente, puede elegir entre los siguientes métodos:

  • Crear una regla de ciclo de vida de S3 para eliminar las versiones no actuales de forma permanente. Para eliminar versiones anteriores de objetos de manera permanente, seleccione Eliminar definitivamente versiones de objetos no actuales y, a continuación, escriba un número en Días tras los que los objetos dejan de ser actuales. Puede especificar opcionalmente el número de versiones más recientes que desea retener introduciendo un valor en Number of newer versions to retain (Número de versiones más recientes que se deben retener). Para obtener más información sobre la creación de esta regla, consulte Configurar un ciclo de vida de S3.

  • Eliminar una versión especificada al incluir el ID de la versión en la solicitud DELETE. Para obtener más información, consulte Eliminar versiones de objetos definitivamente.

  • Crear una regla de ciclo de vida para que caduquen las versiones actuales. Para que caduquen las versiones actuales de los objetos, seleccione Hacer que venzan las versiones actuales de los objetos y escriba un número en Días después de la creación del objeto. Para obtener más información sobre la creación de esta regla de ciclo de vida, consulte Configurar un ciclo de vida de S3.

  • Para eliminar definitivamente todos los objetos versionados y los marcadores de eliminación, cree dos reglas de ciclo de vida: una para que venzan las versiones actuales y eliminar las versiones no actuales de los objetos definitivamente y otra para borrar los marcadores de eliminación de los objetos caducados.

En un bucket con control de versiones activado, una solicitud DELETE que no especifique un ID de versión solo puede eliminar objetos con un ID de versión NULL. Si el objeto se cargó cuando se activó el control de versiones, una solicitud DELETE que no especifique un ID de versión creará un marcador de eliminación de ese objeto.

nota

En el caso de los buckets con bloqueo de objetos de S3 activado, una solicitud de objeto DELETE con un ID de versión de objeto protegido genera un error 403 Acceso denegado. Una solicitud de objeto DELETE sin un ID de versión añade un marcador de eliminación como la versión más reciente del objeto con una respuesta 200 OK. Los objetos protegidos por bloqueo de objetos no se pueden eliminar definitivamente hasta que se eliminen sus periodos de retención y retenciones legales correspondientes. Para obtener más información, consulte Cómo funciona Bloqueo de objetos de S3.

Estoy experimentando una bajada del rendimiento después de habilitar el control de versiones de buckets

Si hay demasiados marcadores de eliminación u objetos versionados y si no se siguen las prácticas recomendadas, se puede producir una bajada del rendimiento en los buckets habilitados para el control de versiones.

Demasiados marcadores de eliminación

Al activar el control de versiones en un bucket, una solicitud DELETE sin ID de versión realizada a un objeto crea un marcador de eliminación con un ID de versión exclusivo. Las configuraciones del ciclo de vida con la regla Hacer que venzan las versiones actuales de los objetos añaden un marcador de eliminación con un ID de versión único a cada objeto. El exceso de marcadores de eliminación puede reducir el rendimiento del bucket.

Cuando se suspende control de versiones en un bucket, Amazon S3 marca el ID de versión como NULL en los objetos que se acaban de crear. Una acción de vencimiento en un bucket con el control de versiones suspendido provoca que Amazon S3 cree un marcador de eliminación con un ID de versión NULL. En un bucket con control de versiones suspendido, se crea un marcador de eliminación NULL para cualquier solicitud de eliminación. Estos marcadores de eliminación NULL también se denominan marcadores de eliminación objetos vencidos cuando se eliminan todas las versiones de objetos y solo queda un único marcador de eliminación. Si se acumulan demasiados marcadores de eliminación NULL, el rendimiento en el bucket se ve afectado.

Demasiados objetos versionados

Si un bucket con control de versiones habilitado contiene objetos con millones de versiones, puede producirse un aumento de los errores 503 Servicio no disponible. Si detecta un aumento significativo en el número de respuestas de HTTP 503 Servicio no disponible recibidas para solicitudes de objeto PUT o DELETE en un bucket de Amazon S3 con el control de versiones habilitado, puede que tenga uno o varios objetos en el bucket con millones de versiones. Si tiene objetos con millones de versiones, Amazon S3 limita automáticamente las solicitudes al bucket. Las solicitudes de limitación protegen al bucket de una cantidad excesiva de tráfico de solicitudes, lo que podría impedir que se realicen otras solicitudes al mismo bucket.

Para determinar qué objetos tienen millones de versiones, utilice el inventario de S3. El inventario de S3 genera un informe que crea una lista de archivos sin formato de los objetos de un bucket. Para obtener más información, consulte Inventario de Amazon S3.

Para comprobar si hay un número elevado de objetos versionados en el bucket, utilice las métricas de Lente de almacenamiento de S3 para ver el Recuento de objetos de la versión actual, Recuento de objetos de la versión no actual de Recuento de objetos de marcador de eliminación. Para obtener más información acerca de las métricas de la lente de almacenamiento, consulte Glosario de métricas de Amazon S3 Storage Lens.

El equipo de Amazon S3 insta a los clientes a investigar las aplicaciones que sobrescriben repetidamente el mismo objeto y pueden llegar a generar millones de versiones de ese objeto para determinar si la aplicación funciona según lo previsto. Por ejemplo, una aplicación que sobrescriba el mismo objeto cada minuto durante una semana puede crear más de diez mil versiones. Recomendamos almacenar menos de cien mil versiones para cada objeto. Si tiene un caso de uso que requiere millones de versiones para uno o más objetos, contacte con el equipo de AWS Support para solicitar ayudar para buscar una solución mejor.

Prácticas recomendadas

Se recomienda aplicar las siguientes prácticas recomendadas para evitar problemas de reducción del rendimiento relacionados con el control de versiones:

  • Habilite una regla de ciclo de vida para que haga que venzan las versiones anteriores de los objetos. Por ejemplo, puede crear una regla de ciclo de vida para que caduquen las versiones no actuales transcurridos 30 días desde la última actualización del objeto. También puede conservar varias versiones no actuales si no quiere eliminarlas todas. Para obtener más información, consulte Configurar un ciclo de vida de S3.

  • Habilite una regla de ciclo de vida para eliminar los marcadores de eliminación de objetos caducados que no tengan objetos de datos asociados en el bucket. Para obtener más información, consulte Eliminar marcadores de eliminación de objetos que vencieron.

Para obtener más información sobre las prácticas recomendadas de optimización del rendimiento de S3, consulte Prácticas recomendadas para patrones de diseño.