Utilizzare i contesti degli oggetti

Questa pagina descrive come allegare e gestire i contesti sugli oggetti Cloud Storage sotto forma di coppie chiave-valore.

Ottenere i ruoli richiesti

Per ottenere le autorizzazioni necessarie per creare e gestire i contesti degli oggetti, chiedi all'amministratore di concederti i seguenti ruoli IAM sull'oggetto:

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Questi ruoli predefiniti contengono le autorizzazioni necessarie per creare e gestire i contesti degli oggetti. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:

Autorizzazioni obbligatorie

Per creare e gestire i contesti degli oggetti sono necessarie le seguenti autorizzazioni:

  • Crea un oggetto con contesti dell'oggetto:
    • storage.objects.create
    • storage.objects.createContext
  • Allega, aggiorna ed elimina contesti degli oggetti:
    • storage.objects.update
    • storage.objects.createContext
    • storage.objects.updateContext
    • storage.objects.deleteContext
  • Elimina contesti degli oggetti: storage.objects.dropContexts
  • Visualizza i contesti degli oggetti:
    • storage.objects.get
    • storage.objects.list

Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Allegare contesti a nuovi oggetti

Allega contesti agli oggetti quando carichi nuovi oggetti nei bucket Cloud Storage. Ogni contesto è costituito da una chiave e da un valore.

Riga di comando

Per allegare contesti quando carichi oggetti con il comando gcloud storage cp, utilizza il flag --custom-contexts:

gcloud storage cp OBJECT_LOCATION gs://DESTINATION_BUCKET_NAME --custom-contexts=KEY=VALUE,...

Dove:

  • OBJECT_LOCATION è il percorso locale dell'oggetto. Ad esempio, Desktop/employees.txt.
  • DESTINATION_BUCKET_NAME è il nome del bucket in cui stai caricando l'oggetto. Ad esempio, my-bucket.
  • KEY è la chiave del contesto da allegare a un oggetto. Ad esempio, Department. Puoi specificare più coppie chiave-valore separate da virgole.
  • VALUE è il valore da associare alla chiave di contesto. Ad esempio, Human resources.

In alternativa, crea un file JSON contenente i contesti che vuoi allegare agli oggetti e utilizza il flag --custom-contexts-file:

  {
    "KEY": {
      "value": "VALUE"
    },
    ...
  }

Dove:

  • KEY è la chiave del contesto da allegare a un oggetto. Ad esempio, Department. Puoi specificare più coppie chiave-valore.
  • VALUE è il valore da associare alla chiave di contesto. Ad esempio, Human resources.

Per collegare i contesti quando carichi directory con il comando gcloud storage rsync, utilizza il flag --custom-contexts o il flag --custom-contexts-file:

gcloud storage rsync DIRECTORY_LOCATION gs://DESTINATION_BUCKET_NAME --recursive --custom-contexts=KEY=VALUE,...

Dove:

  • DIRECTORY_LOCATION è il percorso locale della tua directory. Ad esempio, ~/my_directory.
  • DESTINATION_BUCKET_NAME è il nome del bucket in cui stai caricando la directory. Ad esempio, my-bucket.
  • KEY è la chiave del contesto da allegare agli oggetti. Ad esempio, Department. Puoi specificare più coppie chiave-valore separate da virgole.
  • VALUE è il valore da associare alla chiave di contesto. Ad esempio, Human resources.

API JSON

Per allegare contesti agli oggetti quando carichi nuovi oggetti, utilizza uno dei seguenti metodi:

Come parte dei metadati dell'oggetto in formato JSON, includi il campo contexts:

  {
    "contexts": {
      "custom": {
        "KEY": {
          "value": "VALUE"
        },
        ...
      }
    }
  }

Dove:

  • KEY è la chiave del contesto da allegare a un oggetto. Ad esempio, Department. Puoi specificare più coppie chiave-valore nell'oggetto custom.
  • VALUE è il valore da associare alla chiave di contesto. Ad esempio, Human resources.

Allegare o modificare i contesti di un oggetto esistente

Puoi collegare nuovi contesti agli oggetti esistenti nei bucket Cloud Storage.

Riga di comando

Utilizza il comando gcloud storage objects update:

gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME CUSTOM_CONTEXTS_FLAG

Dove:

  • BUCKET_NAME è il nome del bucket che contiene l'oggetto per cui vuoi modificare il contesto. Ad esempio, my-bucket.
  • OBJECT_NAME è il nome dell'oggetto. Ad esempio, employees.txt.
  • CUSTOM_CONTEXTS_FLAG è uno dei seguenti flag:

    • Per sostituire tutti i contesti esistenti, utilizza --custom-contexts=KEY=VALUE,... o --custom-contexts-file=CUSTOM_CONTEXTS_FILE

      Dove:

      • KEY è la chiave di contesto da allegare a un oggetto. Ad esempio, Department. Puoi specificare più coppie chiave-valore separate da virgole.
      • VALUE è il valore da associare alla chiave di contesto. Ad esempio, Human resources.
      • CUSTOM_CONTEXTS_FILE è il percorso del file JSON o YAML che contiene i contesti da allegare all'oggetto.
    • Per eliminare tutti i contesti esistenti, utilizza il flag --clear-custom-contexts.

    • Per aggiungere, modificare o eliminare singoli contesti, utilizza una combinazione di --update-custom-contexts=KEY=VALUE,... e --remove-custom-contexts=KEY,...

      Dove:

      • KEY è la chiave di contesto che vuoi allegare a un oggetto o eliminare da un oggetto. Ad esempio, Department.
      • VALUE è il valore da associare alla chiave di contesto che vuoi allegare a un oggetto o eliminare da un oggetto. Ad esempio, Human resources.

Se l'operazione ha esito positivo, la risposta è simile al seguente esempio:

Patching gs://my-bucket/employees.txt#1560574162144861...
  Completed 1

Librerie client

Java

Per saperne di più, consulta la documentazione di riferimento dell'API Cloud Storage Java.

Per eseguire l'autenticazione in Cloud Storage, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.


import com.google.cloud.storage.Blob;
import com.google.cloud.storage.BlobId;
import com.google.cloud.storage.BlobInfo;
import com.google.cloud.storage.BlobInfo.ObjectContexts;
import com.google.cloud.storage.BlobInfo.ObjectCustomContextPayload;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
import com.google.common.collect.Maps;
import java.util.Map;

public class SetObjectContexts {
  public static void setObjectContexts(
      String projectId, String bucketName, String objectName, String key, String value)
      throws Exception {
    // 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";

    // The context key-value you want to add
    // String key = "your-context-key";
    // String value = "your-context-value";

    try (Storage storage =
        StorageOptions.newBuilder().setProjectId(projectId).build().getService()) {
      BlobId blobId = BlobId.of(bucketName, objectName);
      Blob blob = storage.get(blobId);
      if (blob == null) {
        System.out.println("The object " + objectName + " was not found in " + bucketName);
        return;
      }

      // Recommended: Set a generation-match precondition to avoid potential race
      // conditions and data corruptions. The request to update returns a 412 error if
      // the object's generation number does not match your precondition.
      Storage.BlobTargetOption precondition = Storage.BlobTargetOption.generationMatch();

      // This section demonstrates how to upsert, delete all, and delete a specific context.

      // To upsert a context (if the key already exists, its value is replaced;
      // otherwise, a new key-value pair is added):
      ObjectCustomContextPayload payload =
          ObjectCustomContextPayload.newBuilder().setValue(value).build();
      Map<String, ObjectCustomContextPayload> custom = Maps.newHashMap();
      custom.put(key, payload);
      ObjectContexts contexts = ObjectContexts.newBuilder().setCustom(custom).build();

      /*
       * To delete all existing contexts:
       * ObjectContexts contexts = ObjectContexts.newBuilder().setCustom(null).build();
       */

      /*
       * To delete a specific key from the context:
       * Map<String, ObjectCustomContextPayload> custom = Maps.newHashMap();
       * custom.put(key, null);
       * ObjectContexts contexts = ObjectContexts.newBuilder().setCustom(custom).build();
       */
      BlobInfo pendingUpdate = blob.toBuilder().setContexts(contexts).build();
      storage.update(pendingUpdate, precondition);

      System.out.println(
          "Updated custom contexts for object " + objectName + " in bucket " + bucketName);
    }
  }
}

API JSON

  1. Avere gcloud CLI installata e inizializzata, il che ti consente di generare un token di accesso per l'intestazione Authorization.

  2. Crea un file JSON contenente le impostazioni dell'oggetto, che deve includere i campi di configurazione contexts per l'oggetto.

    Per aggiungere, modificare o sovrascrivere i contesti esistenti, utilizza il seguente formato:

      {
        "contexts": {
          "custom": {
            "KEY": {
              "value": "VALUE"
            },
            ...
          }
        }
      }

    Dove:

    • KEY è la chiave del contesto da allegare a un oggetto. Ad esempio, Department. Puoi specificare più coppie chiave-valore nell'oggetto custom.
    • VALUE è il valore da associare alla chiave di contesto. Ad esempio, Human resources.

    Per eliminare tutti i contesti esistenti, utilizza il seguente formato:

      {
        "contexts": {
          "custom": null
        }
      }

    Per eliminare una chiave specifica dal contesto, utilizza il seguente formato:

      {
        "contexts": {
          "custom": {
            "KEY": null,
            ...
          }
        }
      }

    Dove:

    KEY è la chiave di contesto che vuoi eliminare da un oggetto. Ad esempio, Department. Puoi specificare più chiavi da eliminare dall'oggetto custom.

  3. Utilizza cURL per chiamare l'API JSON con una richiesta di PATCH oggetto:

    curl -X PATCH --data-binary @JSON_FILE_NAME \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/OBJECT_NAME"

    Dove:

    • JSON_FILE_NAME è il percorso del file che include le informazioni sui contesti degli oggetti.
    • BUCKET_NAME è il nome del bucket che contiene l'oggetto per cui vuoi modificare il contesto. Ad esempio, my-bucket.
    • OBJECT_NAME è il nome codificato come URL dell'oggetto. Ad esempio, employees.txt.

In alternativa, puoi sostituire il contesto di un oggetto con una richiesta PUT Object. La richiesta dell'oggetto PUT sostituisce anche altri metadati dell'oggetto. Pertanto, non consigliamo di utilizzare la richiesta di oggetti PUT.

Visualizzare i contesti degli oggetti

Puoi visualizzare i contesti di un oggetto elencando i metadati dell'oggetto o descrivendo un oggetto specifico.

Riga di comando

Utilizza il comando gcloud storage objects describe:

gcloud storage objects describe gs://BUCKET_NAME/OBJECT_NAME

Dove:

  • BUCKET_NAME è il nome del bucket contenente l'oggetto di cui vuoi visualizzare il contesto. Ad esempio, my-bucket.
  • OBJECT_NAME è il nome dell'oggetto di cui vuoi visualizzare il contesto. Ad esempio, employees.txt

Se l'operazione ha esito positivo, la risposta è simile al seguente esempio:

bucket: my-bucket
contexts:
  Department:
    createTime: '2023-01-01T00:00:00.000000+00:00'
    type: CUSTOM
    updateTime: '2023-01-01T00:00:00.000000+00:00'
    value: Human resources
name: employees.txt

Librerie client

Java

Per saperne di più, consulta la documentazione di riferimento dell'API Cloud Storage Java.

Per eseguire l'autenticazione in Cloud Storage, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.


import com.google.cloud.storage.Blob;
import com.google.cloud.storage.BlobInfo.ObjectContexts;
import com.google.cloud.storage.BlobInfo.ObjectCustomContextPayload;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
import java.util.Map;

public class GetObjectContexts {
  public static void getObjectContexts(String projectId, String bucketName, String objectName)
      throws Exception {
    // 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";

    try (Storage storage =
        StorageOptions.newBuilder().setProjectId(projectId).build().getService()) {

      Blob blob = storage.get(bucketName, objectName);
      if (blob == null) {
        System.out.println("The object " + objectName + " was not found in " + bucketName);
        return;
      }
      ObjectContexts objectContexts = blob.getContexts();

      if (objectContexts != null) {
        Map<String, ObjectCustomContextPayload> customContexts = objectContexts.getCustom();
        if (customContexts == null) {
          System.out.println("No custom contexts found for object: " + objectName);
          return;
        }
        // Print blob's object contexts
        System.out.println("\nCustom Contexts:");
        for (Map.Entry<String, ObjectCustomContextPayload> custom : customContexts.entrySet()) {
          System.out.println(custom.getKey() + "=" + custom.getValue());
        }
      }
    }
  }
}

API JSON

  1. Avere gcloud CLI installata e inizializzata, il che ti consente di generare un token di accesso per l'intestazione Authorization.

  2. Utilizza cURL per chiamare l'API JSON con una richiesta di GET oggetto:

    curl -X GET \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/OBJECT_NAME"

    Dove:

    • BUCKET_NAME è il nome del bucket che contiene l'oggetto di cui vuoi visualizzare il contesto. Ad esempio, my-bucket.
    • OBJECT_NAME è il nome codificato tramite URL dell'oggetto di cui vuoi visualizzare il contesto. Ad esempio, employees.txt.

    Se l'operazione ha esito positivo, la risposta è simile al seguente esempio:

      {
        "kind": "storage#object",
        "name": "employees.txt",
        "bucket": "my-bucket",
        "contexts": {
          "custom": {
            "Department": {
              "value": "Human resources",
              "createTime": "2023-01-01T00:00:00.000Z",
              "updateTime": "2023-01-01T00:00:00.000Z"
            }
          }
        }
      }
      

Filtrare gli oggetti per contesti

Filtra gli oggetti in base all'esistenza di chiavi di contesto dell'oggetto o ai relativi valori specifici. Il filtraggio degli oggetti per contesti consente di individuare e gestire in modo efficiente gruppi particolari di oggetti. Per maggiori dettagli, vedi Filtrare gli oggetti per contesti.

Gestisci i contesti degli oggetti durante le operazioni sugli oggetti

Per impostazione predefinita, Cloud Storage conserva i contesti degli oggetti quando li copi, riscrivi, componi, sposti o ripristini.

Copiare oggetti

Per impostazione predefinita, Cloud Storage conserva i contesti degli oggetti dall'oggetto di origine durante un'operazione di copia, anche se esegui l'override di altri metadati. Per modificare i contesti degli oggetti durante un'operazione di copia:

Riga di comando

I comandi gcloud storage cp, gcloud storage rsync e gcloud storage mv conservano i contesti dell'oggetto di origine per impostazione predefinita. Per modificare i contesti durante queste operazioni, utilizza uno dei seguenti flag:

  • Il flag --custom-contexts per impostare nuovi contesti per l'oggetto di destinazione.

  • Il flag --clear-custom-contexts per impedire che i contesti dell'oggetto origine vengano allegati all'oggetto di destinazione.

  • Una combinazione dei flag --update-custom-contexts e --remove-custom-contexts per modificare i singoli contesti dell'oggetto origine prima di collegarli all'oggetto di destinazione.

Per impostare nuovi contesti quando copi un oggetto, utilizza il comando gcloud storage cp:

gcloud storage cp gs://SOURCE_BUCKET_NAME/SOURCE_OBJECT_NAME gs://DESTINATION_BUCKET_NAME/DESTINATION_OBJECT_NAME --custom-contexts=KEY=VALUE,...

Dove:

  • SOURCE_BUCKET_NAME è il nome del bucket contenente l'oggetto da copiare. Ad esempio, my-source-bucket.
  • SOURCE_OBJECT_NAME è il nome dell'oggetto da copiare. Ad esempio, employees.txt.
  • DESTINATION_BUCKET_NAME è il nome del bucket in cui copiare l'oggetto. Ad esempio, my-destination-bucket.
  • DESTINATION_OBJECT_NAME è il nome dell'oggetto di destinazione. Ad esempio, employees-backup.txt.
  • KEY è la chiave del contesto da allegare a un oggetto. Ad esempio, Department. Puoi specificare più coppie chiave-valore separate da virgole.
  • VALUE è il valore da associare alla chiave di contesto. Ad esempio, Human resources.

Per rimuovere tutti i contesti dall'oggetto di origine quando copi un oggetto, utilizza il comando gcloud storage cp:

gcloud storage cp gs://SOURCE_BUCKET_NAME/SOURCE_OBJECT_NAME gs://DESTINATION_BUCKET_NAME/DESTINATION_OBJECT_NAME --clear-custom-contexts

Dove:

  • SOURCE_BUCKET_NAME è il nome del bucket contenente l'oggetto da copiare. Ad esempio, my-source-bucket.
  • SOURCE_OBJECT_NAME è il nome dell'oggetto da copiare. Ad esempio, pets/dog.png.
  • DESTINATION_BUCKET_NAME è il nome del bucket in cui copiare l'oggetto. Ad esempio, my-destination-bucket.
  • DESTINATION_OBJECT_NAME è il nome dell'oggetto di destinazione. Ad esempio, pets/cat.png.

Per modificare i singoli contesti dell'oggetto di origine quando copi un oggetto, utilizza il comando gcloud storage cp con --update-custom-contexts e --remove-custom-contexts:

gcloud storage cp gs://SOURCE_BUCKET_NAME/SOURCE_OBJECT_NAME gs://DESTINATION_BUCKET_NAME/DESTINATION_OBJECT_NAME --update-custom-contexts=KEY=VALUE,... --remove-custom-contexts=KEY,...

Dove:

  • SOURCE_BUCKET_NAME è il nome del bucket contenente l'oggetto da copiare. Ad esempio, my-source-bucket.
  • SOURCE_OBJECT_NAME è il nome dell'oggetto da copiare. Ad esempio, pets/dog.png.
  • DESTINATION_BUCKET_NAME è il nome del bucket in cui copiare l'oggetto. Ad esempio, my-destination-bucket.
  • DESTINATION_OBJECT_NAME è il nome dell'oggetto di destinazione. Ad esempio, pets/cat.png.
  • KEY è la chiave del contesto da allegare a un oggetto. Ad esempio, Department. Puoi specificare più coppie chiave-valore o chiavi separate da virgole.
  • VALUE è il valore da associare alla chiave di contesto. Ad esempio, Human resources.

API JSON

Per ignorare i contesti durante la copia di un oggetto, includi la proprietà contexts.custom nel corpo della richiesta:

  1. Avere gcloud CLI installata e inizializzata, il che ti consente di generare un token di accesso per l'intestazione Authorization.

  2. Crea un file JSON contenente i contesti da allegare all'oggetto di destinazione:

      {
        "contexts": {
          "custom": {
            "KEY": {
              "value": "VALUE"
            }
          }
        }
      }

    Dove:

    • KEY è la chiave del contesto da allegare a un oggetto. Ad esempio, Department.
    • VALUE è il valore da associare alla chiave di contesto. Ad esempio, Human resources.
  3. Utilizza cURL per chiamare l'API JSON con una richiesta di POST oggetto:

    curl -X POST --data-binary @JSON_FILE_NAME \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://storage.googleapis.com/storage/v1/b/SOURCE_BUCKET_NAME/o/SOURCE_OBJECT_NAME/copyTo/b/DESTINATION_BUCKET_NAME/o/DESTINATION_OBJECT_NAME"

    Dove:

    • JSON_FILE_NAME è il percorso del file JSON che include le informazioni sui contesti degli oggetti.
    • SOURCE_BUCKET_NAME è il nome del bucket che contiene l'oggetto da copiare. Ad esempio, my-source-bucket.
    • SOURCE_OBJECT_NAME è il nome con codifica URL dell'oggetto da copiare. Ad esempio, employees.txt.
    • DESTINATION_BUCKET_NAME è il nome del bucket in cui copiare l'oggetto. Ad esempio, my-destination-bucket.
    • DESTINATION_OBJECT_NAME è il nome con codifica URL dell'oggetto di destinazione. Ad esempio, employees-backup.txt.

Per rimuovere tutti i contesti di origine senza fornire un override, utilizza il parametro di query dropContextGroups=custom nella richiesta:

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  "https://storage.googleapis.com/storage/v1/b/SOURCE_BUCKET_NAME/o/SOURCE_OBJECT_NAME/copyTo/b/DESTINATION_BUCKET_NAME/o/DESTINATION_OBJECT_NAME?dropContextGroups=custom"

Per preservare i contesti, ometti la proprietà contexts.custom dal corpo della richiesta ed escludi dropContextGroups=custom nei parametri di ricerca:

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  "https://storage.googleapis.com/storage/v1/b/SOURCE_BUCKET_NAME/o/SOURCE_OBJECT_NAME/copyTo/b/DESTINATION_BUCKET_NAME/o/DESTINATION_OBJECT_NAME"

Per informazioni sul comportamento dei contesti durante le operazioni di copia, consulta il parametro di query dropContextGroups.

Riscrivere gli oggetti

Per impostazione predefinita, Cloud Storage conserva i contesti degli oggetti dall'oggetto di origine durante un'operazione di riscrittura, anche se esegui l'override di altri metadati. Per modificare i contesti degli oggetti durante un'operazione di riscrittura, completa i seguenti passaggi:

Riga di comando

I comandi gcloud storage cp, gcloud storage rsync e gcloud storage mv eseguono automaticamente le riscritture quando necessario, ad esempio quando si copiano oggetti tra posizioni o classi di archiviazione diverse. gcloud storage cp e gcloud storage rsync creano un oggetto di origine e di destinazione, mentre gcloud storage mv crea l'oggetto di destinazione e rimuove l'oggetto di origine. Poiché queste operazioni creano un nuovo oggetto, puoi anche modificare o allegare contesti nell'ambito dello stesso comando utilizzando uno qualsiasi dei seguenti flag:

  • Il flag --custom-contexts per impostare nuovi contesti per l'oggetto di destinazione.

  • Il flag --clear-custom-contexts per impedire che i contesti dell'oggetto origine vengano allegati all'oggetto di destinazione.

  • Una combinazione dei flag --update-custom-contexts e --remove-custom-contexts per modificare i singoli contesti dell'oggetto origine prima di collegarli all'oggetto di destinazione.

Per impostare nuovi contesti quando copi un oggetto, utilizza il comando gcloud storage cp:

gcloud storage cp gs://SOURCE_BUCKET_NAME/SOURCE_OBJECT_NAME gs://DESTINATION_BUCKET_NAME/DESTINATION_OBJECT_NAME --custom-contexts=KEY=VALUE,...

Dove:

  • SOURCE_BUCKET_NAME è il nome del bucket contenente l'oggetto da copiare. Ad esempio, my-source-bucket.
  • SOURCE_OBJECT_NAME è il nome dell'oggetto da copiare. Ad esempio, employees.txt.
  • DESTINATION_BUCKET_NAME è il nome del bucket in cui copiare l'oggetto. Ad esempio, my-destination-bucket.
  • DESTINATION_OBJECT_NAME è il nome dell'oggetto di destinazione. Ad esempio, employees-backup.txt.
  • KEY è la chiave del contesto da allegare a un oggetto. Ad esempio, Department. Puoi specificare più coppie chiave-valore separate da virgole.
  • VALUE è il valore da associare alla chiave di contesto. Ad esempio, Human resources.

Per rimuovere tutti i contesti dall'oggetto di origine quando copi un oggetto, utilizza il comando gcloud storage cp:

gcloud storage cp gs://SOURCE_BUCKET_NAME/SOURCE_OBJECT_NAME gs://DESTINATION_BUCKET_NAME/DESTINATION_OBJECT_NAME --clear-custom-contexts

Dove:

  • SOURCE_BUCKET_NAME è il nome del bucket contenente l'oggetto da copiare. Ad esempio, my-source-bucket.
  • SOURCE_OBJECT_NAME è il nome dell'oggetto da copiare. Ad esempio, pets/dog.png.
  • DESTINATION_BUCKET_NAME è il nome del bucket in cui copiare l'oggetto. Ad esempio, my-destination-bucket.
  • DESTINATION_OBJECT_NAME è il nome dell'oggetto di destinazione. Ad esempio, pets/cat.png.

Per modificare i singoli contesti dell'oggetto di origine quando copi un oggetto, utilizza il comando gcloud storage cp con --update-custom-contexts e --remove-custom-contexts:

gcloud storage cp gs://SOURCE_BUCKET_NAME/SOURCE_OBJECT_NAME gs://DESTINATION_BUCKET_NAME/DESTINATION_OBJECT_NAME --update-custom-contexts=KEY=VALUE,... --remove-custom-contexts=KEY,...

Dove:

  • SOURCE_BUCKET_NAME è il nome del bucket contenente l'oggetto da copiare. Ad esempio, my-source-bucket.
  • SOURCE_OBJECT_NAME è il nome dell'oggetto da copiare. Ad esempio, pets/dog.png.
  • DESTINATION_BUCKET_NAME è il nome del bucket in cui copiare l'oggetto. Ad esempio, my-destination-bucket.
  • DESTINATION_OBJECT_NAME è il nome dell'oggetto di destinazione. Ad esempio, pets/cat.png.
  • KEY è la chiave del contesto da allegare a un oggetto. Ad esempio, Department. Puoi specificare più coppie chiave-valore o chiavi separate da virgole.
  • VALUE è il valore da associare alla chiave di contesto. Ad esempio, Human resources.

API JSON

Per sostituire i contesti durante la riscrittura di un oggetto, includi la proprietà contexts.custom nel corpo della richiesta:

  1. Avere gcloud CLI installata e inizializzata, il che ti consente di generare un token di accesso per l'intestazione Authorization.

  2. Crea un file JSON contenente i contesti da allegare all'oggetto di destinazione:

      {
        "contexts": {
          "custom": {
            "KEY": {
              "value": "VALUE"
            }
          }
        }
      }

    Dove:

    • KEY è la chiave del contesto da allegare a un oggetto. Ad esempio, Department.
    • VALUE è il valore da associare alla chiave di contesto. Ad esempio, Human resources.
  3. Utilizza cURL per chiamare l'API JSON con una richiesta di riscrittura dell'oggetto POST:

    curl -X POST --data-binary @JSON_FILE_NAME \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://storage.googleapis.com/storage/v1/b/SOURCE_BUCKET_NAME/o/SOURCE_OBJECT_NAME/rewriteTo/b/DESTINATION_BUCKET_NAME/o/DESTINATION_OBJECT_NAME"

    Dove:

    • JSON_FILE_NAME è il percorso del file JSON che include le informazioni sui contesti degli oggetti.
    • SOURCE_BUCKET_NAME è il nome del bucket che contiene l'oggetto da riscrivere. Ad esempio, my-source-bucket.
    • SOURCE_OBJECT_NAME è il nome con codifica URL dell'oggetto da riscrivere. Ad esempio, employees.txt.
    • DESTINATION_BUCKET_NAME è il nome del bucket in cui riscrivere l'oggetto. Ad esempio, my-destination-bucket.
    • DESTINATION_OBJECT_NAME è il nome con codifica URL dell'oggetto di destinazione. Ad esempio, employees-backup.txt.

Per rimuovere tutti i contesti di origine senza fornire un override, utilizza il parametro di query dropContextGroups=custom nella richiesta:

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  "https://storage.googleapis.com/storage/v1/b/SOURCE_BUCKET_NAME/o/SOURCE_OBJECT_NAME/rewriteTo/b/DESTINATION_BUCKET_NAME/o/DESTINATION_OBJECT_NAME?dropContextGroups=custom"

Per conservare i contesti, ometti la proprietà contexts.custom dal corpo della richiesta ed escludi dropContextGroups=custom neparametri di ricercary:

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  "https://storage.googleapis.com/storage/v1/b/SOURCE_BUCKET_NAME/o/SOURCE_OBJECT_NAME/rewriteTo/b/DESTINATION_BUCKET_NAME/o/DESTINATION_OBJECT_NAME"

Per informazioni sul comportamento dei contesti durante le operazioni di riscrittura, consulta il parametro di query dropContextGroups.

Comporre oggetti

Il comando gcloud storage objects compose e il metodo API JSON compose uniscono i contesti degli oggetti di origine e li collegano agli oggetti di destinazione per impostazione predefinita. Cloud Storage risolve i conflitti dando la priorità ai contesti degli oggetti di origine elaborati in un secondo momento. Per saperne di più sul comportamento del contesto dell'oggetto durante un'operazione di composizione, consulta Contesti degli oggetti compositi.

Riga di comando

Per specificare nuovi contesti per l'oggetto di destinazione durante la composizione degli oggetti, utilizza il flag --contexts:

gcloud storage objects compose gs://BUCKET_NAME/SOURCE_OBJECT_1 gs://BUCKET_NAME/SOURCE_OBJECT_2 gs://BUCKET_NAME/DESTINATION_OBJECT_NAME --contexts=KEY=VALUE,...

Dove:

  • BUCKET_NAME è il nome del bucket che contiene gli oggetti di origine e in cui viene creato l'oggetto di destinazione. Ad esempio, my-bucket.
  • SOURCE_OBJECT_1 e SOURCE_OBJECT_2 sono oggetti di origine da comporre.
  • DESTINATION_OBJECT_NAME è il nome dell'oggetto di destinazione da creare. Ad esempio, my-composite-object.
  • KEY è la chiave del contesto da allegare a un oggetto. Ad esempio, Department. Puoi specificare più coppie chiave-valore separate da virgole.
  • VALUE è il valore da associare alla chiave di contesto. Ad esempio, Human resources.

Per impedire che i contesti di origine vengano collegati agli oggetti compositi, utilizza il flag --clear-custom-contexts:

gcloud storage objects compose gs://BUCKET_NAME/SOURCE_OBJECT_1 gs://BUCKET_NAME/SOURCE_OBJECT_2 gs://BUCKET_NAME/DESTINATION_OBJECT_NAME --clear-custom-contexts

Dove:

  • BUCKET_NAME è il nome del bucket che contiene gli oggetti di origine e in cui viene creato l'oggetto di destinazione. Ad esempio, my-bucket.
  • SOURCE_OBJECT_1 e SOURCE_OBJECT_2 sono gli oggetti di origine da comporre.
  • DESTINATION_OBJECT_NAME è il nome dell'oggetto di destinazione da creare. Ad esempio, my-composite-object.

API JSON

Per specificare nuovi contesti per l'oggetto di destinazione durante la composizione degli oggetti, includi i contesti nella proprietà destination del corpo della richiesta.

  1. Avere gcloud CLI installata e inizializzata, il che ti consente di generare un token di accesso per l'intestazione Authorization.

  2. Crea un file JSON contenente il corpo della richiesta:

    {
      "sourceObjects": [
        {"name": "SOURCE_OBJECT_1"},
        {"name": "SOURCE_OBJECT_2"}
      ],
      "destination": {
        "contentType": "text/plain",
        "contexts": {
          "custom": {
            "KEY": {
              "value": "VALUE"
            }
          }
        }
      }
    }

    Dove:

    • SOURCE_OBJECT_1 e SOURCE_OBJECT_2 sono oggetti di origine da comporre.
    • KEY è la chiave di contesto da allegare a un oggetto. Ad esempio, Department.
    • VALUE è il valore da associare alla chiave di contesto. Ad esempio, Human resources.
  3. Utilizza cURL per chiamare l'API JSON con una richiesta POSTcompose Object:

    curl -X POST --data-binary @JSON_FILE_NAME \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/DESTINATION_OBJECT_NAME/compose"

    Dove:

    • JSON_FILE_NAME è il percorso del file JSON che include il corpo della richiesta.
    • BUCKET_NAME è il nome del bucket che contiene gli oggetti di origine e in cui verrà creato l'oggetto di destinazione. Ad esempio, my-bucket.
    • DESTINATION_OBJECT_NAME è il nome dell'oggetto di destinazione da creare. Ad esempio, my-composite-object.

Per impedire l'allegato di contesti di origine a oggetti compositi, utilizza il parametro di query dropContextGroups=custom nella richiesta:

  1. Avere gcloud CLI installata e inizializzata, il che ti consente di generare un token di accesso per l'intestazione Authorization.

  2. Crea un file JSON contenente il corpo della richiesta:

    {
      "sourceObjects": [
        {"name": "SOURCE_OBJECT_1"},
        {"name": "SOURCE_OBJECT_2"}
      ],
      "destination": {
        "contentType": "text/plain"
    }
    }

    Dove:

    • SOURCE_OBJECT_1 e SOURCE_OBJECT_2 sono oggetti di origine da comporre.
  3. Utilizza cURL per chiamare l'API JSON con una richiesta POSTcompose Object:

    curl -X POST --data-binary @JSON_FILE_NAME \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/DESTINATION_OBJECT_NAME/compose?dropContextGroups=custom"

    Dove:

    • JSON_FILE_NAME è il percorso del file JSON che include il corpo della richiesta.
    • BUCKET_NAME è il nome del bucket che contiene gli oggetti di origine e in cui verrà creato l'oggetto di destinazione. Ad esempio, my-bucket.
    • DESTINATION_OBJECT_NAME è il nome dell'oggetto di destinazione da creare. Ad esempio, my-composite-object.

Passaggi successivi