Usa retenciones de objetos

En esta página, se describe cómo usar retenciones de objetos, incluida la colocación predeterminada de retenciones en objetos nuevos y en objetos individuales. Si quieres obtener más detalles sobre esta función, incluidos los tipos de retenciones que se pueden colocar en los objetos, consulta Retenciones de objetos.

Requisitos previos

Antes de usar esta función en Cloud Storage, debes realizar las siguientes acciones:

  1. Tener suficiente permiso para ver y actualizar los depósitos y objetos en Cloud Storage:

    • Si eres propietario del proyecto que contiene el depósito, es probable que tengas los permisos necesarios.

    • Si usas IAM, debes tener los permisos de storage.buckets.update, storage.buckets.get, storage.objects.update y storage.objects.get en el depósito relevante. Consulta Usa los permisos de IAM para obtener instrucciones sobre cómo obtener una función, como roles/storage.admin, que tiene tres permisos.

    • Si usas las LCA, debes tener permisos de PROPIETARIO en el depósito relevante y en los objetos que contiene. Consulta Configura las LCA para obtener instrucciones sobre cómo realizar esto.

Trabaja con la propiedad de retención predeterminada basada en eventos

En las siguientes tareas, se muestra cómo habilitar, inhabilitar y ver la propiedad de retención predeterminada basada en eventos en un depósito. Cuando esta propiedad está habilitada, los objetos nuevos agregados al depósito automáticamente obtienen una retención basada en eventos.

Habilita la propiedad de retención predeterminada basada en eventos

Sigue los pasos a continuación para colocar automáticamente una retención basada en eventos en cada objeto nuevo agregado a un grupo:

Console

  1. Abre el navegador de Cloud Storage en Google Cloud Platform Console.
    Abrir el navegador de Cloud Storage
  2. En la lista de depósitos, haz clic en el nombre del depósito en el que deseas habilitar la propiedad predeterminada de retención basada en eventos.

  3. Selecciona la pestaña Bloqueo del depósito cerca de la parte superior de la página.

  4. En la entrada Retenciones basadas en eventos de forma predeterminada, haz clic en el botón Inhabilitar.

gsutil

Usa el comando gsutil retention event-default set y reemplaza [VALUES_IN_BRACKETS] por los valores adecuados.

gsutil retention event-default set gs://[BUCKET_NAME]

Muestras de código

C++

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para C++.

namespace gcs = google::cloud::storage;
using google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name) {
  StatusOr<gcs::BucketMetadata> original =
      client.GetBucketMetadata(bucket_name);
  if (!original.ok()) {
    std::cerr << "Error fetching bucket metadata for bucket " << bucket_name
              << ", status=" << original.status() << std::endl;
    return;
  }
  StatusOr<gcs::BucketMetadata> patched_metadata = client.PatchBucket(
      bucket_name,
      gcs::BucketMetadataPatchBuilder().SetDefaultEventBasedHold(true),
      gcs::IfMetagenerationMatch(original->metageneration()));
  if (!patched_metadata.ok()) {
    std::cerr << "Error setting default event based hold in bucket "
              << original->name() << ", status=" << original.status()
              << std::endl;
    return;
  }
  std::cout << "The default event-based hold for objects in bucket "
            << bucket_name << " is "
            << (patched_metadata->default_event_based_hold() ? "enabled"
                                                             : "disabled")
            << std::endl;
}

C#

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para C#.

private void EnableBucketDefaultEventBasedHold(string bucketName)
{
    var storage = StorageClient.Create();
    var bucket = storage.GetBucket(bucketName);
    bucket.DefaultEventBasedHold = true;
    bucket = storage.UpdateBucket(bucket, new UpdateBucketOptions()
    {
        // Use IfMetagenerationMatch to avoid race conditions.
        IfMetagenerationMatch = bucket.Metageneration
    });
    Console.WriteLine($"Default event-based hold was enabled for {bucketName}");
}

Go

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Go.

bucket := c.Bucket(bucketName)
bucketAttrsToUpdate := storage.BucketAttrsToUpdate{
	DefaultEventBasedHold: true,
}
if _, err := bucket.Update(ctx, bucketAttrsToUpdate); err != nil {
	return err
}

Java

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Java.

// Instantiate a Google Cloud Storage client
Storage storage = StorageOptions.getDefaultInstance().getService();

// The name of a bucket, e.g. "my-bucket"
// String bucketName = "my-bucket";

Bucket bucket =
    storage.update(BucketInfo.newBuilder(bucketName).setDefaultEventBasedHold(true).build());

System.out.println("Default event-based hold was enabled for " + bucketName);

Node.js

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Node.js.

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';

// Enables a default event-based hold for the bucket.
await storage.bucket(bucketName).setMetadata({
  defaultEventBasedHold: true,
});

console.log(`Default event-based hold was enabled for ${bucketName}.`);

PHP

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para PHP.

use Google\Cloud\Storage\StorageClient;

/**
 * Enables a default event-based hold for a bucket.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 */
function enable_default_event_based_hold($bucketName)
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $bucket->update(['defaultEventBasedHold' => true]);
    printf('Default event-based hold was enabled for %s' . PHP_EOL, $bucketName);
}

Python

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Python.

# bucket_name = "my-bucket"

storage_client = storage.Client()
bucket = storage_client.bucket(bucket_name)

bucket.default_event_based_hold = True
bucket.patch()

print('Default event based hold was enabled for {}'.format(bucket_name))

Ruby

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Ruby.

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Name of your Google Cloud Storage bucket"

require "google/cloud/storage"

storage = Google::Cloud::Storage.new project_id: project_id
bucket  = storage.bucket bucket_name

bucket.update do |b|
  b.default_event_based_hold = true
end

puts "Default event-based hold was enabled for #{bucket_name}."

API de REST

API de JSON

  1. Obtén un token de acceso de autorización de OAuth 2.0 Playground. Configura Playground para usar tus propias credenciales de OAuth.
  2. Crea un archivo .json que contenga la siguiente información:

    {
      "defaultEventBasedHold": true
    }
  3. Usa cURL para llamar a la API de JSON con una solicitud de depósito PATCH y reemplaza [VALUES_IN_BRACKETS] por los valores adecuados:

    curl -X PATCH --data-binary @[JSON_FILE_NAME].json \
    -H "Authorization: Bearer [OAUTH2_TOKEN]" \
    -H "Content-Type: application/json" \
    "https://www.googleapis.com/storage/v1/b/[BUCKET_NAME]?fields=defaultEventBasedHold"

API de XML

La API de XML no se puede usar para trabajar con objetos conservados. Usa una de las otras herramientas de Cloud Storage, como gsutil, en su lugar.

Obtén el estado de retención predeterminado de un depósito

Sigue los pasos a continuación para ver si un depósito coloca retenciones basadas en eventos en objetos nuevos de forma predeterminada:

Console

  1. Abre el navegador de Cloud Storage en Google Cloud Platform Console.
    Abrir el navegador de Cloud Storage
  2. En la lista de depósitos, haz clic en el nombre del depósito en el que desees verificar el estado predeterminado basado en eventos.

  3. Selecciona la pestaña Bloqueo del depósito cerca de la parte superior de la página.

  4. El estado aparece en la entrada Retenciones basadas en eventos de forma predeterminada.

gsutil

Usa el siguiente comando gsutil ls y reemplaza [VALUES_IN_BRACKETS] por los valores adecuados:

gsutil ls -L -b gs://[BUCKET_NAME]/

La respuesta se ve como el siguiente ejemplo:

gs://[BUCKET_NAME]/ :
  Storage class:         MULTI_REGIONAL
  ...
  ...
  Default Event-Based Hold: On
  ...

Muestras de código

C++

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para C++.

namespace gcs = google::cloud::storage;
using google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name) {
  StatusOr<gcs::BucketMetadata> meta = client.GetBucketMetadata(bucket_name);
  if (!meta.ok()) {
    std::cerr << "Error fetching bucket metadata for bucket " << bucket_name
              << ", status=" << meta.status() << std::endl;
    return;
  }
  std::cout << "The default event-based hold for objects in bucket "
            << meta->name() << " is "
            << (meta->default_event_based_hold() ? "enabled" : "disabled")
            << std::endl;
}

C#

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para C#.

private bool GetBucketDefaultEventBasedHold(string bucketName)
{
    var storage = StorageClient.Create();
    var bucket = storage.GetBucket(bucketName);
    bool? defaultEventBasedHoldOrNull = bucket?.DefaultEventBasedHold;
    bool defaultEventBasedHold =
        defaultEventBasedHoldOrNull.HasValue ? defaultEventBasedHoldOrNull.Value : false;
    Console.WriteLine("Default event-based hold: {0}", defaultEventBasedHold);
    return defaultEventBasedHold;
}

Go

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Go.

attrs, err := c.Bucket(bucketName).Attrs(ctx)
if err != nil {
	return nil, err
}
log.Printf("Default event-based hold enabled? %t\n",
	attrs.DefaultEventBasedHold)

Java

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Java.

// Instantiate a Google Cloud Storage client
Storage storage = StorageOptions.getDefaultInstance().getService();

// The name of a bucket, e.g. "my-bucket"
// String bucketName = "my-bucket";

Bucket bucket =
    storage.get(bucketName, BucketGetOption.fields(BucketField.DEFAULT_EVENT_BASED_HOLD));

if (bucket.getDefaultEventBasedHold() != null && bucket.getDefaultEventBasedHold()) {
  System.out.println("Default event-based hold is enabled for " + bucketName);
} else {
  System.out.println("Default event-based hold is not enabled for " + bucketName);
}

Node.js

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Node.js.

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';

// get bucketName metadata
const [metadata] = await storage.bucket(bucketName).getMetadata();
console.log(`Default event-based hold: ${metadata.defaultEventBasedHold}.`);

PHP

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para PHP.

use Google\Cloud\Storage\StorageClient;

/**
 * Enables a default event-based hold for a bucket.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 */
function get_default_event_based_hold($bucketName)
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);

    if ($bucket->info()['defaultEventBasedHold']) {
        printf('Default event-based hold is enabled for ' . $bucketName . PHP_EOL);
    } else {
        printf('Default event-based hold is not enabled for ' . $bucketName . PHP_EOL);
    }
}

Python

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Python.

# bucket_name = "my-bucket"

storage_client = storage.Client()
bucket = storage_client.bucket(bucket_name)
bucket.reload()

if bucket.default_event_based_hold:
    print('Default event-based hold is enabled for {}'.format(bucket_name))
else:
    print('Default event-based hold is not enabled for {}'
          .format(bucket_name))

Ruby

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Ruby.

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Name of your Google Cloud Storage bucket"

require "google/cloud/storage"

storage = Google::Cloud::Storage.new project_id: project_id
bucket  = storage.bucket bucket_name

if bucket.default_event_based_hold?
  puts "Default event-based hold is enabled for {bucket_name}."
else
  puts "Default event-based hold is not enabled for {bucket_name}."
end

API de REST

API de JSON

  1. Obtén un token de acceso de autorización de OAuth 2.0 Playground. Configura Playground para usar tus propias credenciales de OAuth.
  2. Usa cURL para llamar a la API de JSON con una solicitud de Depósito GET que incluya los fields deseados y reemplaza [VALUES_IN_BRACKETS] por los valores adecuados:

    curl -X GET -H "Authorization: Bearer [OAUTH2_TOKEN]" \
    "https://www.googleapis.com/storage/v1/b/[BUCKET_NAME]?fields=defaultEventBasedHold"

    Si el depósito tiene habilitada una retención predeterminada basada en eventos, la respuesta se parece al siguiente ejemplo:

    {
      "retentionPolicy": true
    }

API de XML

La API de XML no se puede usar para trabajar con objetos conservados. Usa una de las otras herramientas de Cloud Storage, como gsutil, en su lugar.

Inhabilita una retención predeterminada basada en eventos

Sigue los pasos a continuación para inhabilitar una retención basada en eventos predetermina en un depósito:

Console

  1. Abre el navegador de Cloud Storage en Google Cloud Platform Console.
    Abrir el navegador de Cloud Storage
  2. En la lista de depósitos, haz clic en el nombre del depósito en el que deseas inhabilitar la propiedad de retención predeterminada basada en eventos.

  3. Selecciona la pestaña Bloqueo del depósito cerca de la parte superior de la página.

  4. En la entrada Retenciones basadas en eventos de forma predeterminada, haz clic en el botón Habilitar.

gsutil

Usa el comando gsutil retention event-default release y reemplaza [VALUES_IN_BRACKETS] por los valores adecuados.

gsutil retention event-default release gs://[BUCKET_NAME]

Muestras de código

C++

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para C++.

namespace gcs = google::cloud::storage;
using google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name) {
  StatusOr<gcs::BucketMetadata> original =
      client.GetBucketMetadata(bucket_name);
  if (!original.ok()) {
    std::cerr << "Error fetching bucket metadata for bucket " << bucket_name
              << ", status=" << original.status() << std::endl;
    return;
  }
  StatusOr<gcs::BucketMetadata> patched_metadata = client.PatchBucket(
      bucket_name,
      gcs::BucketMetadataPatchBuilder().SetDefaultEventBasedHold(false),
      gcs::IfMetagenerationMatch(original->metageneration()));
  if (!patched_metadata.ok()) {
    std::cerr << "Error disabling default event based hold in bucket "
              << original->name() << ", status=" << original.status()
              << std::endl;
    return;
  }
  std::cout << "The default event-based hold for objects in bucket "
            << bucket_name << " is "
            << (patched_metadata->default_event_based_hold() ? "enabled"
                                                             : "disabled")
            << std::endl;
}

C#

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para C#.

private void DisableBucketDefaultEventBasedHold(string bucketName)
{
    var storage = StorageClient.Create();
    var bucket = storage.GetBucket(bucketName);
    bucket.DefaultEventBasedHold = false;
    bucket = storage.UpdateBucket(bucket, new UpdateBucketOptions()
    {
        // Use IfMetagenerationMatch to avoid race conditions.
        IfMetagenerationMatch = bucket.Metageneration
    });
    Console.WriteLine($"Default event-based hold was disabled for {bucketName}");
}

Go

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Go.

bucket := c.Bucket(bucketName)
bucketAttrsToUpdate := storage.BucketAttrsToUpdate{
	DefaultEventBasedHold: false,
}
if _, err := bucket.Update(ctx, bucketAttrsToUpdate); err != nil {
	return err
}

Java

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Java.

// Instantiate a Google Cloud Storage client
Storage storage = StorageOptions.getDefaultInstance().getService();

// The name of a bucket, e.g. "my-bucket"
// String bucketName = "my-bucket";

Bucket bucket =
    storage.update(BucketInfo.newBuilder(bucketName).setDefaultEventBasedHold(false).build());

System.out.println("Default event-based hold was disabled for " + bucketName);

Node.js

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Node.js.

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';

// Disables a default event-based hold for a bucket.
await storage.bucket(bucketName).setMetadata({
  defaultEventBasedHold: false,
});
console.log(`Default event-based hold was disabled for ${bucketName}.`);

PHP

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para PHP.

use Google\Cloud\Storage\StorageClient;

/**
 * Disables a default event-based hold for a bucket.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 */
function disable_default_event_based_hold($bucketName)
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $bucket->update(['defaultEventBasedHold' => false]);
    printf('Default event-based hold was disabled for %s' . PHP_EOL, $bucketName);
}

Python

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Python.

# bucket_name = "my-bucket"

storage_client = storage.Client()
bucket = storage_client.bucket(bucket_name)

bucket.default_event_based_hold = False
bucket.patch()

print("Default event based hold was disabled for {}".format(bucket_name))

Ruby

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Ruby.

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Name of your Google Cloud Storage bucket"

require "google/cloud/storage"

storage = Google::Cloud::Storage.new project_id: project_id
bucket  = storage.bucket bucket_name

bucket.update do |b|
  b.default_event_based_hold = false
end

puts "Default event-based hold was disabled for #{bucket_name}."

API de REST

API de JSON

  1. Obtén un token de acceso de autorización de OAuth 2.0 Playground. Configura Playground para usar tus propias credenciales de OAuth.
  2. Crea un archivo .json que contenga la siguiente información:

    {
      "defaultEventBasedHold": false
    }
  3. Usa cURL para llamar a la API de JSON con una solicitud de depósito PATCH y reemplaza [VALUES_IN_BRACKETS] por los valores adecuados:

    curl -X PATCH --data-binary @[JSON_FILE_NAME].json \
    -H "Authorization: Bearer [OAUTH2_TOKEN]" \
    -H "Content-Type: application/json" \
    "https://www.googleapis.com/storage/v1/b/[BUCKET_NAME]?fields=defaultEventBasedHold"

API de XML

La API de XML no se puede usar para trabajar con objetos conservados. Usa una de las otras herramientas de Cloud Storage, como gsutil, en su lugar.

Trabaja con retenciones de objetos

Las siguientes tareas te muestran cómo colocar, ver y liberar retenciones en los objetos.

Coloca una retención de objetos

Sigue los pasos a continuación para colocar una retención en un objeto en tu depósito:

Console

  1. Abre el navegador de Cloud Storage en Google Cloud Platform Console.
    Abrir el navegador de Cloud Storage
  2. En la lista de depósitos, haz clic en el nombre del depósito que contiene los objetos a los que deseas colocar en retención.

  3. Selecciona la casilla de verificación junto a los nombres de los objetos que deseas colocar en retención.

  4. Haz clic en el botón Administrar retenciones.

    Aparecerá la ventana Administrar retenciones.

  5. Selecciona la casilla de verificación para los tipos de retenciones que deseas colocar en los objetos seleccionados

  6. Haz clic en Guardar configuración de retención.

gsutil

Usa el comando gsutil retention con un [HOLD_TYPE] de temp o event y reemplaza otros [VALUES_IN_BRACKETS] por los valores adecuados:

gsutil retention [HOLD_TYPE] set gs://[BUCKET_NAME]/[OBJECT_NAME]

Muestras de código

C++

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para C++.

El siguiente ejemplo configura una retención basada en eventos en un objeto:

namespace gcs = google::cloud::storage;
using google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name, std::string object_name) {
  StatusOr<gcs::ObjectMetadata> original =
      client.GetObjectMetadata(bucket_name, object_name);
  if (!original.ok()) {
    std::cerr << "Error getting object metadata for object " << object_name
              << " in bucket " << bucket_name
              << ", status=" << original.status() << std::endl;
    return;
  }
  StatusOr<gcs::ObjectMetadata> updated = client.PatchObject(
      bucket_name, object_name,
      gcs::ObjectMetadataPatchBuilder().SetEventBasedHold(true),
      gcs::IfMetagenerationMatch(original->metageneration()));
  if (!updated.ok()) {
    std::cerr << "Error patching object metadata for object " << object_name
              << " in bucket " << bucket_name
              << ", status=" << updated.status() << std::endl;
    return;
  }

  std::cout << "The event hold for object " << updated->name()
            << " in bucket " << updated->bucket() << " is "
            << (updated->event_based_hold() ? "enabled" : "disabled")
            << std::endl;
}

El siguiente ejemplo configura una retención temporal en un objeto:

namespace gcs = google::cloud::storage;
using google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name, std::string object_name) {
  StatusOr<gcs::ObjectMetadata> original =
      client.GetObjectMetadata(bucket_name, object_name);
  if (!original.ok()) {
    std::cerr << "Error getting object metadata for object " << object_name
              << " in bucket " << bucket_name
              << ", status=" << original.status() << std::endl;
    return;
  }
  StatusOr<gcs::ObjectMetadata> updated = client.PatchObject(
      bucket_name, object_name,
      gcs::ObjectMetadataPatchBuilder().SetTemporaryHold(true),
      gcs::IfMetagenerationMatch(original->metageneration()));
  if (!updated.ok()) {
    std::cerr << "Error patching object metadata for object " << object_name
              << " in bucket " << bucket_name
              << ", status=" << updated.status() << std::endl;
    return;
  }

  std::cout << "The temporary hold for object " << updated->name()
            << " in bucket " << updated->bucket() << " is "
            << (updated->temporary_hold() ? "enabled" : "disabled")
            << std::endl;
}

C#

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para C#.

El siguiente ejemplo configura una retención basada en eventos en un objeto:

private void SetObjectEventBasedHold(string bucketName,
    string objectName)
{
    var storage = StorageClient.Create();
    var storageObject = storage.GetObject(bucketName, objectName);
    storageObject.EventBasedHold = true;
    storageObject = storage.UpdateObject(storageObject, new UpdateObjectOptions()
    {
        // Use IfMetagenerationMatch to avoid race conditions.
        IfMetagenerationMatch = storageObject.Metageneration
    });
}

El siguiente ejemplo configura una retención temporal en un objeto:

private void SetObjectTemporaryHold(string bucketName,
    string objectName)
{
    var storage = StorageClient.Create();
    var storageObject = storage.GetObject(bucketName, objectName);
    storageObject.TemporaryHold = true;
    storageObject = storage.UpdateObject(storageObject, new UpdateObjectOptions()
    {
        // Use IfMetagenerationMatch to avoid race conditions.
        IfMetagenerationMatch = storageObject.Metageneration,
    });
}

Go

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Go.

El siguiente ejemplo configura una retención basada en eventos en un objeto:

o := client.Bucket(bucket).Object(object)
objectAttrsToUpdate := storage.ObjectAttrsToUpdate{
	EventBasedHold: false,
}
if _, err := o.Update(ctx, objectAttrsToUpdate); err != nil {
	return err
}

El siguiente ejemplo configura una retención temporal en un objeto:

o := client.Bucket(bucket).Object(object)
objectAttrsToUpdate := storage.ObjectAttrsToUpdate{
	TemporaryHold: false,
}
if _, err := o.Update(ctx, objectAttrsToUpdate); err != nil {
	return err
}

Java

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Java.

El siguiente ejemplo configura una retención basada en eventos en un objeto:

// Instantiate a Google Cloud Storage client
Storage storage = StorageOptions.getDefaultInstance().getService();

// The name of a bucket, e.g. "my-bucket"
// String bucketName = "my-bucket";

// The name of a blob, e.g. "my-blob"
// String blobName = "my-blob";

BlobId blobId = BlobId.of(bucketName, blobName);
Blob blob = storage.update(BlobInfo.newBuilder(blobId).setEventBasedHold(true).build());

System.out.println("Event-based hold was set for " + blobName);

El siguiente ejemplo configura una retención temporal en un objeto:

// Instantiate a Google Cloud Storage client
Storage storage = StorageOptions.getDefaultInstance().getService();

// The name of a bucket, e.g. "my-bucket"
// String bucketName = "my-bucket";

// The name of a blob, e.g. "my-blob"
// String blobName = "my-blob";

BlobId blobId = BlobId.of(bucketName, blobName);
Blob blob = storage.update(BlobInfo.newBuilder(blobId).setTemporaryHold(true).build());

System.out.println("Temporary hold was set for " + blobName);

Node.js

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Node.js.

El siguiente ejemplo configura una retención basada en eventos en un objeto:

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const filename = 'File to access, e.g. file.txt';

// Set event-based hold
await storage
  .bucket(bucketName)
  .file(fileName)
  .setMetadata({
    eventBasedHold: true,
  });
console.log(`Event-based hold was set for ${fileName}.`);

El siguiente ejemplo configura una retención temporal en un objeto:

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const filename = 'File to access, e.g. file.txt';

await storage
  .bucket(bucketName)
  .file(fileName)
  .setMetadata({
    temporaryHold: true,
  });
console.log(`Temporary hold was set for ${fileName}.`);

PHP

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para PHP.

El siguiente ejemplo configura una retención basada en eventos en un objeto:

use Google\Cloud\Storage\StorageClient;

/**
 * Sets an event-based hold for an object.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $objectName the name of your Cloud Storage object.
 */
function set_event_based_hold($bucketName, $objectName)
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->object($objectName);
    $object->update(['eventBasedHold' => true]);
    printf('Event-based hold was set for %s' . PHP_EOL, $objectName);
}

El siguiente ejemplo configura una retención temporal en un objeto:

use Google\Cloud\Storage\StorageClient;

/**
 * Sets a temporary hold for an object.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $objectName the name of your Cloud Storage object.
 */
function set_temporary_hold($bucketName, $objectName)
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->object($objectName);
    $object->update(['temporaryHold' => true]);
    printf('Temporary hold was set for %s' . PHP_EOL, $objectName);
}

Python

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Python.

El siguiente ejemplo configura una retención basada en eventos en un objeto:

# bucket_name = "my-bucket"
# blob_name = "my-blob"

storage_client = storage.Client()
bucket = storage_client.bucket(bucket_name)
blob = bucket.blob(blob_name)

blob.event_based_hold = True
blob.patch()

print('Event based hold was set for {}'.format(blob_name))

El siguiente ejemplo configura una retención temporal en un objeto:

# bucket_name = "my-bucket"
# blob_name = "my-blob"

storage_client = storage.Client()
bucket = storage_client.bucket(bucket_name)
blob = bucket.blob(blob_name)

blob.temporary_hold = True
blob.patch()

print("Temporary hold was set for #{blob_name}")

Ruby

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Ruby.

El siguiente ejemplo configura una retención basada en eventos en un objeto:

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Your Google Cloud Storage bucket name"
# file_name   = "Name of a file in the Cloud Storage bucket"

require "google/cloud/storage"

storage = Google::Cloud::Storage.new project_id: project_id
bucket  = storage.bucket bucket_name
file    = bucket.file file_name

file.set_event_based_hold!

puts "Event-based hold was set for #{file_name}."

El siguiente ejemplo configura una retención temporal en un objeto:

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Your Google Cloud Storage bucket name"
# file_name   = "Name of a file in the Cloud Storage bucket"

require "google/cloud/storage"

storage = Google::Cloud::Storage.new project_id: project_id
bucket  = storage.bucket bucket_name
file    = bucket.file file_name

file.set_temporary_hold!

puts "Temporary hold was set for #{file_name}."

API de REST

API de JSON

  1. Obtén un token de acceso de autorización de OAuth 2.0 Playground. Configura Playground para usar tus propias credenciales de OAuth.
  2. Crea un archivo .json que contenga la siguiente información y reemplaza [HOLD_TYPE] por temporaryHold o eventBasedHold:

    {
      "[HOLD_TYPE]": true
    }
  3. Usa cURL para llamar a la API de JSON con una solicitud de objeto PATCH y reemplaza [VALUES_IN_BRACKETS] por los valores adecuados:

    curl -X PATCH --data-binary @[JSON_FILE_NAME].json \
    -H "Authorization: Bearer [OAUTH2_TOKEN]" \
    -H "Content-Type: application/json" \
    "https://www.googleapis.com/storage/v1/b/[BUCKET_NAME]/o/[OBJECT_NAME]"

API de XML

La API de XML no se puede usar para trabajar con objetos conservados. Usa una de las otras herramientas de Cloud Storage, como gsutil, en su lugar.

Obtén el estado de retención para un objeto

A fin de ver si alguna retención existe en un objeto, sigue las instrucciones generales para Ver metadatos de objeto.

Libera una retención de objeto

Sigue los pasos a continuación para liberar una retención de un objeto en tu depósito:

Console

  1. Abre el navegador de Cloud Storage en Google Cloud Platform Console.
    Abrir el navegador de Cloud Storage
  2. En la lista de depósitos, haz clic en el nombre del depósito que contiene los objetos a los que les quieres liberar las retenciones.

  3. Selecciona la casilla de verificación junto a los nombres de los objetos a los que deseas quitarles las retenciones.

  4. Haz clic en el botón Administrar retenciones.

    Aparecerá la ventana Administrar retenciones.

  5. Desmarca la casilla de verificación de las retenciones que deseas quitar.

  6. Haz clic en Guardar configuración de retención.

gsutil

Usa el comando gsutil retention con un [HOLD_TYPE] de temp o event y reemplaza otros [VALUES_IN_BRACKETS] por los valores adecuados:

gsutil retention [HOLD_TYPE] release gs://[BUCKET_NAME]/[OBJECT_NAME]

Muestras de código

C++

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para C++.

El siguiente ejemplo configura una retención basada en eventos en un objeto:

namespace gcs = google::cloud::storage;
using google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name, std::string object_name) {
  StatusOr<gcs::ObjectMetadata> original =
      client.GetObjectMetadata(bucket_name, object_name);
  if (!original.ok()) {
    std::cerr << "Error getting object metadata for object " << object_name
              << " in bucket " << bucket_name
              << ", status=" << original.status() << std::endl;
    return;
  }
  StatusOr<gcs::ObjectMetadata> updated = client.PatchObject(
      bucket_name, object_name,
      gcs::ObjectMetadataPatchBuilder().SetEventBasedHold(false),
      gcs::IfMetagenerationMatch(original->metageneration()));
  if (!updated.ok()) {
    std::cerr << "Error patching object metadata for object " << object_name
              << " in bucket " << bucket_name
              << ", status=" << updated.status() << std::endl;
    return;
  }

  std::cout << "The event hold for object " << updated->name()
            << " in bucket " << updated->bucket() << " is "
            << (updated->event_based_hold() ? "enabled" : "disabled")
            << std::endl;
}

El siguiente ejemplo configura una retención temporal en un objeto:

namespace gcs = google::cloud::storage;
using google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name, std::string object_name) {
  StatusOr<gcs::ObjectMetadata> original =
      client.GetObjectMetadata(bucket_name, object_name);
  if (!original.ok()) {
    std::cerr << "Error getting object metadata for object " << object_name
              << " in bucket " << bucket_name
              << ", status=" << original.status() << std::endl;
    return;
  }
  StatusOr<gcs::ObjectMetadata> updated = client.PatchObject(
      bucket_name, object_name,
      gcs::ObjectMetadataPatchBuilder().SetTemporaryHold(false),
      gcs::IfMetagenerationMatch(original->metageneration()));
  if (!updated.ok()) {
    std::cerr << "Error patching object metadata for object " << object_name
              << " in bucket " << bucket_name
              << ", status=" << updated.status() << std::endl;
    return;
  }
  std::cout << "The temporary hold for object " << updated->name()
            << " in bucket " << updated->bucket() << " is "
            << (updated->temporary_hold() ? "enabled" : "disabled")
            << std::endl;
}

C#

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para C#.

El siguiente ejemplo libera una retención basada en eventos en un objeto:

private void ReleaseObjectEventBasedHold(string bucketName,
    string objectName)
{
    var storage = StorageClient.Create();
    var storageObject = storage.GetObject(bucketName, objectName);
    storageObject.EventBasedHold = false;
    storageObject = storage.UpdateObject(storageObject, new UpdateObjectOptions()
    {
        // Use IfMetagenerationMatch to avoid race conditions.
        IfMetagenerationMatch = storageObject.Metageneration,
    });
}

El siguiente ejemplo libera una retención temporal en un objeto:

private void ReleaseObjectTemporaryHold(string bucketName,
    string objectName)
{
    var storage = StorageClient.Create();
    var storageObject = storage.GetObject(bucketName, objectName);
    storageObject.TemporaryHold = false;
    storageObject = storage.UpdateObject(storageObject, new UpdateObjectOptions()
    {
        // Use IfMetagenerationMatch to avoid race conditions.
        IfMetagenerationMatch = storageObject.Metageneration,
    });
}

Go

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Go.

El siguiente ejemplo libera una retención basada en eventos en un objeto:

o := client.Bucket(bucket).Object(object)
objectAttrsToUpdate := storage.ObjectAttrsToUpdate{
	EventBasedHold: false,
}
if _, err := o.Update(ctx, objectAttrsToUpdate); err != nil {
	return err
}

El siguiente ejemplo libera una retención temporal en un objeto:

o := client.Bucket(bucket).Object(object)
objectAttrsToUpdate := storage.ObjectAttrsToUpdate{
	TemporaryHold: false,
}
if _, err := o.Update(ctx, objectAttrsToUpdate); err != nil {
	return err
}

Java

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Java.

El siguiente ejemplo libera una retención basada en eventos en un objeto:

// Instantiate a Google Cloud Storage client
Storage storage = StorageOptions.getDefaultInstance().getService();

// The name of a bucket, e.g. "my-bucket"
// String bucketName = "my-bucket";

// The name of a blob, e.g. "my-blob"
// String blobName = "my-blob";

BlobId blobId = BlobId.of(bucketName, blobName);
Blob blob = storage.update(BlobInfo.newBuilder(blobId).setEventBasedHold(false).build());

System.out.println("Event-based hold was released for " + blobName);

El siguiente ejemplo libera una retención temporal en un objeto:

// Instantiate a Google Cloud Storage client
Storage storage = StorageOptions.getDefaultInstance().getService();

// The name of a bucket, e.g. "my-bucket"
// String bucketName = "my-bucket";

// The name of a blob, e.g. "my-blob"
// String blobName = "my-blob";

BlobId blobId = BlobId.of(bucketName, blobName);
Blob blob = storage.update(BlobInfo.newBuilder(blobId).setTemporaryHold(false).build());

System.out.println("Temporary hold was released for " + blobName);

Node.js

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Node.js.

El siguiente ejemplo libera una retención basada en eventos en un objeto:

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const filename = 'File to access, e.g. file.txt';

await storage
  .bucket(bucketName)
  .file(fileName)
  .setMetadata({
    eventBasedHold: false,
  });
console.log(`Event-based hold was released for ${fileName}.`);

El siguiente ejemplo libera una retención temporal en un objeto:

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const filename = 'File to access, e.g. file.txt';

await storage
  .bucket(bucketName)
  .file(fileName)
  .setMetadata({
    temporaryHold: false,
  });
console.log(`Temporary hold was released for ${fileName}.`);

PHP

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para PHP.

El siguiente ejemplo libera una retención basada en eventos en un objeto:

use Google\Cloud\Storage\StorageClient;

/**
 * Releases an event-based hold for an object.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $objectName the name of your Cloud Storage object.
 */
function release_event_based_hold($bucketName, $objectName)
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->object($objectName);
    $object->update(['eventBasedHold' => false]);
    printf('Event-based hold was released for %s' . PHP_EOL, $objectName);
}

El siguiente ejemplo libera una retención temporal en un objeto:

use Google\Cloud\Storage\StorageClient;

/**
 * Releases a temporary hold for an object.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $objectName the name of your Cloud Storage object.
 */
function release_temporary_hold($bucketName, $objectName)
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->object($objectName);
    $object->update(['temporaryHold' => false]);
    printf('Temporary hold was released for %s' . PHP_EOL, $objectName);
}

Ruby

Si quieres obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Ruby.

El siguiente ejemplo libera una retención basada en eventos en un objeto:

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Your Google Cloud Storage bucket name"
# file_name   = "Name of a file in the Cloud Storage bucket"

require "google/cloud/storage"

storage = Google::Cloud::Storage.new project_id: project_id
bucket  = storage.bucket bucket_name
file    = bucket.file file_name

file.release_event_based_hold!

puts "Event-based hold was released for #{file_name}."

El siguiente ejemplo libera una retención temporal en un objeto:

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Your Google Cloud Storage bucket name"
# file_name   = "Name of a file in the Cloud Storage bucket"

require "google/cloud/storage"

storage = Google::Cloud::Storage.new project_id: project_id
bucket  = storage.bucket bucket_name
file    = bucket.file file_name

file.release_temporary_hold!

puts "Temporary hold was released for #{file_name}."

API de REST

API de JSON

  1. Obtén un token de acceso de autorización de OAuth 2.0 Playground. Configura Playground para usar tus propias credenciales de OAuth.
  2. Crea un archivo .json que contenga la siguiente información y reemplaza [HOLD_TYPE] por temporaryHold o eventBasedHold:

    {
      "[HOLD_TYPE]": false
    }
  3. Usa cURL para llamar a la API de JSON con una solicitud de objeto PATCH y reemplaza [VALUES_IN_BRACKETS] por los valores adecuados:

    curl -X PATCH --data-binary @[JSON_FILE_NAME].json \
    -H "Authorization: Bearer [OAUTH2_TOKEN]" \
    -H "Content-Type: application/json" \
    "https://www.googleapis.com/storage/v1/b/[BUCKET_NAME]/o/[OBJECT_NAME]"

API de XML

La API de XML no se puede usar para trabajar con objetos conservados. Usa una de las otras herramientas de Cloud Storage, como gsutil, en su lugar.

¿Qué sigue?

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.