El control de versiones de objetos conserva los objetos borrados como objetos no actuales con versiones a los que se puede acceder en el bucket hasta que se quitan de forma explícita. Esta característica se usa para realizar un seguimiento de los cambios en los objetos y habilitar la recuperación de versiones específicas de un objeto. En esta página, se describe la función y las opciones disponibles cuando se usa.
Te recomendamos que uses borrar de forma no definitiva en lugar del control de versiones de objetos para proteger contra la pérdida permanente de datos de eliminaciones accidentales o maliciosas. Para obtener más información sobre cuándo usar borrar de forma no definitiva y el control de versiones de objetos, consulta Consideraciones.
Introducción
Habilita el control de versiones de objetos para un bucket. Una vez que se habilita, sucede lo siguiente:
Cloud Storage retiene una versión de objeto no actual cada vez que realizas un reemplazo o borras una versión publicada de un objeto, siempre que no especifiques el número de generación de la versión publicada.
Las versiones no actuales conservan el nombre del objeto, pero se identifican de forma exclusiva por su número de generación.
Las versiones no actuales solo aparecen en las solicitudes que piden de forma explícita que se incluyan.
Puedes borrar una versión no actual de un objeto si incluyes el número de generación en la solicitud de eliminación o usas la Administración del ciclo de vida de los objetos.
En un bucket con la eliminación no definitiva habilitada, cuando borras un objeto no actual, Cloud Storage cambia su estado a borrado de forma no definitiva. Un objeto borrado de forma no definitiva se borra de forma permanente después de que vence su período de retención de eliminación no definitiva.
Las versiones no actuales de objetos no dependen de las versiones publicadas.
Si inhabilitas el control de versiones de objetos, sucede lo siguiente:
El bucket ya no acumula nuevas versiones no actuales de objetos.
Las versiones de objetos que ya existen en el bucket no se ven afectadas.
Consideraciones
- El control de versiones de los objetos no se puede habilitar en un depósito que actualmente tenga una política de retención.
No hay un límite predeterminado para la cantidad de versiones de objetos que puedes tener. Cada versión no actual de un objeto se cobra a la misma tarifa que estaba cuando estaba publicada.
Los cargos de eliminación temprana se aplican solo cuando se quita una versión del objeto del bucket, no cuando esta se vuelve no actual. La duración del almacenamiento de una versión que se quita de un bucket se basa en el tiempo en que se agregó al bucket, no en el momento en que se convirtió en no actual.
Si habilitas el control de versiones, considera usar la Administración del ciclo de vida de los objetos, que puede quitar versiones anteriores de un objeto después de un período específico o cuando las versiones más recientes se convierten en no actuales. Para una configuración posible, consulta el ejemplo de configuración del ciclo de vida a fin de borrar objetos.
Para determinar si deseas habilitar el control de versiones de objetos o la eliminación no definitiva en tu bucket, ten en cuenta los siguientes puntos:
Si deseas evitar la pérdida permanente de datos por eliminaciones accidentales o maliciosas, usa la eliminación no definitiva en lugar del control de versiones de objetos. La eliminación no definitiva proporciona protección a nivel de bucket mediante la retención de todos los objetos activos o no actuales borrados recientemente. También puede proteger contra eliminaciones a nivel de bucket.
Si tienes requisitos de facturación específicos y configuraste las reglas de Administración del ciclo de vida de los objetos para conservar una cantidad específica de versiones no actuales, usa el control de versiones de objetos.
En ese caso, solo obtienes protección parcial contra las eliminaciones accidentales, ya que el control de versiones de objetos no protege contra los eventos a nivel de bucket o las eliminaciones de objetos no actuales no deseadas.
Los objetos no actuales son accesibles y legibles, mientras que los objetos borrados de forma no definitiva se conservan sin conexión y no son legibles. El restablecimiento de objetos borrados de forma no definitiva requiere permisos de IAM específicos que están disponibles para el rol de IAM de administrador de almacenamiento (
roles/storage.admin
).Si deseas acceder a los objetos borrados más recientemente y un alto nivel de protección contra la pérdida permanente de datos debido a eventos de eliminación accidentales y maliciosos, puedes habilitar el control de versiones de objetos y la eliminación de forma no definitiva en el mismo bucket. Puedes configurar la política de Administración del ciclo de vida de los objetos para que borre de forma automática las versiones no actuales después de una cantidad específica de días y, luego, usar la eliminación no definitiva para proporcionar una capa adicional de protección.
Metadatos de objetos no actuales
Las versiones no actuales de objetos tienen sus propios metadatos, que pueden diferir de los metadatos de la versión publicada. Lo más importante es que una versión no actual conserva sus LCA y no siempre tiene los mismos permisos que la versión publicada.
Cada versión, ya sea publicada o no actual, tiene un conjunto de metadatos. Solo el número de metageneración más reciente hace referencia a los metadatos. Los números de metageneración anteriores no se pueden usar para acceder a los metadatos que cambiaron desde entonces.
Puedes actualizar los metadatos para una versión no actual de un objeto si especificas su generation
en tu solicitud. Para garantizar una semántica de lectura, modificación y escritura segura, puedes usar una condición previa de coincidencia de metageneración. El uso de esta condición previa hace que la actualización falle si los metadatos que quieres actualizar se cambiaron entre el momento en que los leíste y que enviaste la actualización.
Ejemplo de control de versiones de los objetos
En este ejemplo, se muestra lo que sucede con el archivo cat.jpg
en un bucket con el control de versiones de objetos y la eliminación no definitiva a medida que reemplazas, actualizas y borras el archivo.
- Sube una imagen nueva
La primera vez que subes
cat.jpg
a Cloud Storage, recibe un númerogeneration
y un númerometageneration
. En este ejemplo, el número de generación es1360887697105000
. Como el objeto es nuevo, el númerometageneration
es1
.cat.jpg
recibe los númerosgeneration
ymetageneration
aunque el control de versiones de objetos no esté habilitado. Puedes obtener estos números si visualizas los metadatos del objeto.- Habilitas el control de versiones de objetos
En este punto, decides habilitar el control de versiones de objetos para tu depósito. Esto no afecta los números de
generation
ometageneration
decat.jpg
.- Cambia los metadatos de la imagen
Actualizas los metadatos para
cat.jpg
mediante el agregado de metadatos personalizados:color:black
. La actualización de metadatos hace que aumente el valormetageneration
decat.jpg
, en este caso de1
a2
. Sin embargo, el objeto en sí permanece sin cambios, por lo que Cloud Storage continúa almacenando solo una versión decat.jpg
, y la versión sigue teniendo un número degeneration
de1360887697105000
.- Sube una versión nueva de la imagen
Subes una versión nueva de
cat.jpg
a tu depósito de Cloud Storage. Cuando lo haces, el control de versiones del objeto pasa el objetocat.jpg
existente a un estado no actual. La versión no actual conserva la misma clase de almacenamiento y metadatos que tenía antes. La versión no actual aparece solo si realizas una lista con versión: no aparece en los comandos de lista normales. Ahora se hace referencia a la versión no actual como:cat.jpg#1360887697105000
.Mientras tanto, el
cat.jpg
que se acaba de subir se convierte en la versión publicada del objeto. Estecat.jpg
nuevo obtiene su propio número degeneration
, en este ejemplo:1360887759327000
. También obtiene sus propios metadatos y un númerometageneration
de1
, lo que significa que no contiene los metadatoscolor:black
, a menos que lo especifiques. Cuando accedes acat.jpg,
o lo modificas, esta es la versión que se usa. Como alternativa, puedes consultar esta versión decat.jpg
con su número degeneration
. Por ejemplo, cuando usas la CLI de Google Cloud, debes referirte a ella comocat.jpg#1360887759327000
.- Borra la versión publicada de la imagen
Borra
cat.jpg
. Cuando lo haces, la versión que tenía el número de generación1360887759327000
se convierte en no actual. Tu depósito contiene dos versiones no actuales decat.jpg
y ninguna versión publicada. Aún puedes hacer referencia a cualquiera de las versiones no actuales con su númerogeneration
, pero falla si intentas acceder acat.jpg
sin un númerogeneration
.Del mismo modo, una lista de objetos normal del depósito no mostrará
cat.jpg
como uno de los objetos en el depósito. Para obtener información sobre cómo enumerar las versiones no actuales de objetos, consulta Enumera las versiones no actuales de objetos.- Inhabilita el control de versiones
Inhabilitas el control de versiones de objetos, que evita que los objetos se conviertan en no actuales. Las versiones no actuales de objetos existentes permanecen en Cloud Storage. Aunque el control de versiones de objetos está inhabilitado,
cat.jpg#1360887697105000
ycat.jpg#1360887759327000
permanecen almacenados en tu bucket hasta que los borres.- Restablece una de las versiones no actuales
Incluso con el control de versiones de objetos inhabilitado, puedes hacer una copia de una de las versiones no actuales existentes, que restablece la versión de forma efectiva. Una vez que haces esto, tu bucket tiene tres versiones de
cat.jpg
: las dos versiones no actuales y la versión publicada que se generó cuando se hizo el restablecimiento.- Elimina una de las versiones no actuales
Puedes borrar una versión no actual de un objeto de forma manual o mediante la Administración del ciclo de vida de los objetos.
Cuando borras una versión no actual,
cat.jpg#1360887697105000
, se borra de forma no definitiva. Este objeto borrado de forma no definitiva se conserva durante el tiempo de retención de eliminación no definitiva especificado en la política de eliminación no definitiva del bucket. Una vez que vence la duración de la retención, Cloud Storage borra de forma permanente la versión borrada de forma no definitiva de este objeto.- Restablece una de las versiones de los objetos borrados de forma no definitiva
Incluso con el control de versiones de objetos inhabilitado, puedes restablecer una versión borrada de forma no definitiva de un objeto no actual. Una copia de una versión borrada de forma no definitiva se restablece como la versión publicada con metadatos de objetos nuevos y una fecha de creación nueva. El objeto original borrado de forma no definitiva también permanece en el bucket y se borra de forma permanente después de que vence la duración de retención de eliminación no definitiva.
Referencia del control de versiones de objetos
En esta tabla de referencia, se muestra lo que sucede cuando realizas ciertas acciones con el control de versiones de objetos.
Estado del control de versiones de objetos | Estado de eliminación no definitiva | Acción | Resultado |
---|---|---|---|
Inhabilitada | Inhabilitada | ||
Borrar dog.png . |
dog.png se borra de forma permanente. |
||
Borrar una versión no actual de dog.png mediante la especificación de su número de generación.1 |
La versión no actual se borra de forma permanente. | ||
Reemplaza dog.png por una versión nueva. |
La versión nueva reemplaza a la publicada y recibe un número de generación nuevo. La versión publicada antigua se borra de forma permanente. | ||
Copiar una versión no actual de dog.png que reemplace a la versión publicada.1 |
Una copia de la versión no actual reemplaza a la publicada y recibe un número de generación nuevo. La versión publicada antigua se borra de forma permanente. | ||
Inhabilitada | Habilitado | ||
Borrar dog.png . |
dog.png se borra de forma no definitiva. |
||
Borrar una versión no actual de dog.png mediante la especificación de su número de generación.1 |
La versión no actual se borra de forma no definitiva. | ||
Reemplaza dog.png por una versión nueva. |
La versión nueva reemplaza a la publicada y recibe un número de generación nuevo. La versión publicada antigua se borra de forma no definitiva. | ||
Copiar una versión no actual de dog.png que reemplace a la versión publicada.1 |
Una copia de la versión no actual reemplaza a la publicada y recibe un número de generación nuevo. La versión publicada antigua se borra de forma no definitiva. | ||
Habilitado | Inhabilitada | ||
Borrar la versión publicada de dog.png sin especificar su número de generación. |
La versión publicada se convierte en una no actual y conserva el mismo número de generación. | ||
Borrar la versión publicada de dog.png mediante la especificación de su número de generación. |
La versión publicada se borra de forma permanente. | ||
Borrar una versión no actual de dog.png mediante la especificación de su número de generación. |
La versión no actual se borra de forma permanente. | ||
Reemplaza dog.png por una versión nueva. |
La versión nueva reemplaza a la publicada y recibe un número de generación nuevo. La versión publicada antigua se convierte en una no actual y conserva el mismo número de generación. | ||
Copiar una versión no actual de dog.png que reemplace a la publicada. |
Una copia de la versión no actual reemplaza a la publicada y recibe un número de generación nuevo. La versión publicada antigua se convierte en una no actual y conserva el mismo número de generación. | ||
Habilitado | Habilitado | ||
Borrar la versión publicada de dog.png sin especificar su número de generación. |
La versión publicada se convierte en una no actual y conserva el mismo número de generación. | ||
Borrar la versión publicada de dog.png mediante la especificación de su número de generación. |
La versión publicada se borra de forma no definitiva. | ||
Borrar una versión no actual de dog.png mediante la especificación de su número de generación. |
La versión no actual se borra de forma no definitiva. | ||
Reemplaza dog.png por una versión nueva. |
La versión nueva reemplaza a la publicada y recibe un número de generación nuevo. La versión publicada antigua se convierte en una no actual y conserva el mismo número de generación. | ||
Copiar una versión no actual de dog.png que reemplace a la publicada. |
Una copia de la versión no actual reemplaza a la publicada y recibe un número de generación nuevo. La versión publicada antigua se convierte en una no actual y conserva el mismo número de generación. |
1 Es posible que exista una versión no actual si el bucket tenía habilitado el control de versiones de objetos.
Comportamiento de restablecimiento de archivos
Puedes restablecer de manera eficaz una versión no actual de objeto a la versión publicada actual. Consulta Restablece las versiones de objetos no actuales para obtener una guía paso a paso al respecto.
Cuando haces esto con el control de versiones de objetos habilitado, si ya existe una versión publicada del objeto en el bucket, Cloud Storage reemplaza la versión publicada existente, pero también la conserva como una nueva versión no actual. En ese caso, el bucket contendrá el objeto reemplazado (ahora no actual) y dos copias del objeto que antes era no actual (una copia publicada y otra aún no actual) y todos incurren en cargos de almacenamiento. Para evitar cargos innecesarios, borra la versión no actual que usaste para crear la copia publicada actual o configura la Administración del ciclo de vida de los objetos para quitar los objetos no actuales cuando cumplan con las condiciones que especifiques.
¿Qué sigue?
- Obtén más información sobre cómo habilitar el control de versiones de objetos.
- Trabaja con objetos no actuales.
- Obtén información sobre las propiedades del objeto generation y metageneration.
- Obtén información sobre la Administración del ciclo de vida de los objetos, que te permite administrar automáticamente las versiones de los objetos.
- Consulta un ejemplo de Administración del ciclo de vida de los objetos que funciona con el control de versiones de objetos.