Cambia las clases de almacenamiento de objetos

En esta página, se describe cómo reemplazar un objeto para cambiar la clase de almacenamiento de los objetos dentro de un depósito. Para aprender a cambiar las clases de almacenamiento de objetos sin reemplazarlos, consulta la característica Administración del ciclo de vida de los objetos.

Console

Las clases de almacenamiento de objetos individuales no se pueden configurar a través de Console. En su lugar, usa gsutil.

gsutil

Usa el marcador -s en un comando rewrite. Por ejemplo:

gsutil rewrite -s [STORAGE_CLASS] gs://[PATH_TO_OBJECT]

En el ejemplo anterior, se ilustra lo siguiente:

  • [STORAGE_CLASS] es la clase de almacenamiento nueva del objeto. Un ejemplo es nearline.
  • [PATH_TO_OBJECT] es el nombre del objeto al que le quieres cambiar la clase. Un ejemplo es pets/dog.png.

Muestras de código

C++

Si deseas 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, std::string object_name,
   std::string storage_class) {
  StatusOr<gcs::ObjectMetadata> object_metadata =
      client.RewriteObjectBlocking(
          bucket_name, object_name, bucket_name, object_name,
          gcs::WithObjectMetadata(
              gcs::ObjectMetadata().set_storage_class(storage_class)));

  if (!object_metadata) {
    throw std::runtime_error(object_metadata.status().message());
  }

  std::cout << "Changed storage class of object " << object_metadata->name()
            << " in bucket " << object_metadata->bucket() << " to "
            << object_metadata->storage_class() << "\n";
}

Java

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

import com.google.cloud.storage.Blob;
import com.google.cloud.storage.BlobId;
import com.google.cloud.storage.BlobInfo;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageClass;
import com.google.cloud.storage.StorageOptions;

public class ChangeObjectStorageClass {
  public static void changeObjectStorageClass(
      String projectId, String bucketName, String objectName) {
    // The ID of your GCP project
    // String projectId = "your-project-id";

    // The ID of your GCS bucket
    // String bucketName = "your-unique-bucket-name";

    // The ID of your GCS object
    // String objectName = "your-object-name";

    Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
    BlobId blobId = BlobId.of(bucketName, objectName);

    // See the StorageClass documentation for other valid storage classes:
    // https://googleapis.dev/java/google-cloud-clients/latest/com/google/cloud/storage/StorageClass.html
    StorageClass storageClass = StorageClass.COLDLINE;

    // You can't change an object's storage class directly, the only way is to rewrite the object
    // with the
    // desired storage class
    Storage.CopyRequest request =
        Storage.CopyRequest.newBuilder()
            .setSource(blobId)
            .setTarget(BlobInfo.newBuilder(blobId).setStorageClass(storageClass).build())
            .build();
    Blob updatedBlob = storage.copy(request).getResult();

    System.out.println(
        "Object "
            + objectName
            + " in bucket "
            + bucketName
            + " had its storage class set to "
            + updatedBlob.getStorageClass().name());
  }
}

API de REST

API de JSON

  1. Obtén un token de autorización de acceso 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:

    {
      "storageClass": "[STORAGE_CLASS]"
    }

    En el ejemplo anterior, se ilustra lo siguiente:

  3. Usa cURL para llamar a la API de JSON con una solicitud de objeto POST:

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

    En el ejemplo anterior, se ilustra lo siguiente:

    • [JSON_FILE_NAME] es el nombre del archivo JSON que creaste en el paso 2.
    • [OAUTH2_TOKEN] es el token de acceso que generaste en el paso 1.
    • [BUCKET_NAME] es el nombre del depósito que contiene el objeto original. Un ejemplo es my-bucket.
    • [OBJECT_NAME] es el nombre del objeto. Un ejemplo es pets/dog.png.

API de XML

  1. Obtén un token de autorización de acceso de OAuth 2.0 Playground. Configura Playground para usar tus propias credenciales de OAuth.
  2. Usa cURL para llamar a la API de XML con una solicitud de objeto PUT:

    curl -X PUT --data-binary @[OBJECT] \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      -H "Content-Type: [OBJECT_CONTENT_TYPE]" \
      -H "x-goog-storage-class: [STORAGE_CLASS]" \
      "https://storage.googleapis.com/[BUCKET_NAME]/[OBJECT_NAME]"

    En el ejemplo anterior, se ilustra lo siguiente:

    • [OBJECT] es la ruta de acceso local al objeto del que quieres cambiar la clase de almacenamiento (debes volver a subir el objeto cuando cambies la clase de almacenamiento con la API de XML). Por ejemplo, Desktop/dog.png.
    • [OAUTH2_TOKEN] es el token de acceso que generaste en el paso 1.
    • [OBJECT_CONTENT_TYPE] es el tipo de contenido del objeto. Por ejemplo, image/png.
    • [STORAGE_CLASS] es la clase de almacenamiento nueva del objeto. Por ejemplo, nearline.
    • [BUCKET_NAME] es el nombre del depósito que contiene el objeto que deseas reemplazar. Un ejemplo es my-bucket.
    • [OBJECT_NAME] es el nombre del objeto que vas a reemplazar. Un ejemplo es pets/dog.png.

Próximos pasos