Elimina oggetti

Questa pagina mostra come eliminare gli oggetti dai bucket in Cloud Storage. Per una panoramica dei metodi di eliminazione degli oggetti, consulta Informazioni sull'eliminazione degli oggetti.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per eliminare gli oggetti, chiedi all'amministratore di concederti i seguenti ruoli IAM sul bucket che contiene gli oggetti che vuoi eliminare:

  • Elimina gli oggetti utilizzando Google Cloud CLI o le API REST: Utente oggetto Storage (roles/storage.objectUser)
  • Elimina gli oggetti utilizzando la console Google Cloud : Storage Admin (roles/storage.admin)
  • In alternativa, per eliminare gli oggetti utilizzando la console Google Cloud : Visualizzatore (roles/viewer) e Utente oggetti Storage (roles/storage.objectUser)

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 eliminare gli oggetti. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:

Autorizzazioni obbligatorie

Per eliminare gli oggetti sono necessarie le seguenti autorizzazioni:

  • Elimina oggetti: storage.objects.delete
  • Elenca gli oggetti utilizzando la console Google Cloud o utilizzando il flag --recursive o i caratteri jolly in Google Cloud CLI: storage.objects.list
  • Elenca i bucket utilizzando la console Google Cloud : storage.buckets.list

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

Eliminare un singolo oggetto

Questa sezione mostra come eliminare un oggetto alla volta.

Per eliminare un singolo oggetto:

Console

  1. Nella console Google Cloud , vai alla pagina Bucket in Cloud Storage.

    Vai a Bucket

  2. Nell'elenco dei bucket, fai clic sul nome del bucket che contiene gli oggetti da eliminare.

    Si apre la pagina Dettagli bucket con la scheda Oggetti selezionata.

  3. Vai all'oggetto, che potrebbe trovarsi in una cartella.

  4. Seleziona la casella di controllo per l'oggetto da eliminare.

  5. Fai clic su Elimina e poi su Elimina nella finestra di dialogo visualizzata.

Riga di comando

Utilizza il comando Google Cloud CLI gcloud storage rm:

gcloud storage rm gs://BUCKET_NAME/OBJECT_NAME

Dove:

  • BUCKET_NAME è il nome del bucket contenente l'oggetto che vuoi eliminare. Ad esempio, my-bucket.
  • OBJECT_NAME è il nome dell'oggetto che vuoi eliminare. Ad esempio, pets/dog.png.

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

Removing objects:
Removing gs://example-bucket/file.txt...
  Completed 1/1

Librerie client

C++

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

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.

namespace gcs = ::google::cloud::storage;
[](gcs::Client client, std::string const& bucket_name,
   std::string const& object_name) {
  google::cloud::Status status =
      client.DeleteObject(bucket_name, object_name);

  if (!status.ok()) throw std::runtime_error(status.message());
  std::cout << "Deleted " << object_name << " in bucket " << bucket_name
            << "\n";
}

C#

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

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.


using Google.Cloud.Storage.V1;
using System;

public class DeleteFileSample
{
    public void DeleteFile(
        string bucketName = "your-unique-bucket-name",
        string objectName = "your-object-name")
    {
        var storage = StorageClient.Create();
        storage.DeleteObject(bucketName, objectName);
        Console.WriteLine($"Deleted {objectName}.");
    }
}

Go

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

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 (
	"context"
	"fmt"
	"io"
	"time"

	"cloud.google.com/go/storage"
)

// deleteFile removes specified object.
func deleteFile(w io.Writer, bucket, object string) error {
	// bucket := "bucket-name"
	// object := "object-name"
	ctx := context.Background()
	client, err := storage.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("storage.NewClient: %w", err)
	}
	defer client.Close()

	ctx, cancel := context.WithTimeout(ctx, time.Second*10)
	defer cancel()

	o := client.Bucket(bucket).Object(object)

	// Optional: set a generation-match precondition to avoid potential race
	// conditions and data corruptions. The request to delete the file is aborted
	// if the object's generation number does not match your precondition.
	attrs, err := o.Attrs(ctx)
	if err != nil {
		return fmt.Errorf("object.Attrs: %w", err)
	}
	o = o.If(storage.Conditions{GenerationMatch: attrs.Generation})

	if err := o.Delete(ctx); err != nil {
		return fmt.Errorf("Object(%q).Delete: %w", object, err)
	}
	fmt.Fprintf(w, "Blob %v deleted.\n", object)
	return nil
}

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.Storage;
import com.google.cloud.storage.StorageOptions;

public class DeleteObject {
  public static void deleteObject(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();
    Blob blob = storage.get(bucketName, objectName);
    if (blob == null) {
      System.out.println("The object " + objectName + " wasn't found in " + bucketName);
      return;
    }
    BlobId idWithGeneration = blob.getBlobId();
    // Deletes the blob specified by its id. When the generation is present and non-null it will be
    // specified in the request.
    // If versioning is enabled on the bucket and the generation is present in the delete request,
    // only the version of the object with the matching generation will be deleted.
    // If instead you want to delete the current version, the generation should be dropped by
    // performing the following.
    // BlobId idWithoutGeneration =
    //    BlobId.of(idWithGeneration.getBucket(), idWithGeneration.getName());
    // storage.delete(idWithoutGeneration);
    storage.delete(idWithGeneration);

    System.out.println("Object " + objectName + " was permanently deleted from " + bucketName);
  }
}

Node.js

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

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.

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// The ID of your GCS bucket
// const bucketName = 'your-unique-bucket-name';

// The ID of your GCS file
// const fileName = 'your-file-name';

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

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

// Optional:
// Set a generation-match precondition to avoid potential race conditions
// and data corruptions. The request to delete is aborted if the object's
// generation number does not match your precondition. For a destination
// object that does not yet exist, set the ifGenerationMatch precondition to 0
// If the destination object already exists in your bucket, set instead a
// generation-match precondition using its generation number.
const deleteOptions = {
  ifGenerationMatch: generationMatchPrecondition,
};
async function deleteFile() {
  await storage.bucket(bucketName).file(fileName).delete(deleteOptions);

  console.log(`gs://${bucketName}/${fileName} deleted`);
}

deleteFile().catch(console.error);

PHP

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

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.

use Google\Cloud\Storage\StorageClient;

/**
 * Delete an object.
 *
 * @param string $bucketName The name of your Cloud Storage bucket.
 *        (e.g. 'my-bucket')
 * @param string $objectName The name of your Cloud Storage object.
 *        (e.g. 'my-object')
 */
function delete_object(string $bucketName, string $objectName): void
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->object($objectName);
    $object->delete();
    printf('Deleted gs://%s/%s' . PHP_EOL, $bucketName, $objectName);
}

Python

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

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.

from google.cloud import storage


def delete_blob(bucket_name, blob_name):
    """Deletes a blob from the bucket."""
    # bucket_name = "your-bucket-name"
    # blob_name = "your-object-name"

    storage_client = storage.Client()

    bucket = storage_client.bucket(bucket_name)
    blob = bucket.blob(blob_name)
    generation_match_precondition = None

    # Optional: set a generation-match precondition to avoid potential race conditions
    # and data corruptions. The request to delete is aborted if the object's
    # generation number does not match your precondition.
    blob.reload()  # Fetch blob metadata to use in generation_match_precondition.
    generation_match_precondition = blob.generation

    blob.delete(if_generation_match=generation_match_precondition)

    print(f"Blob {blob_name} deleted.")

Ruby

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

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.

def delete_file bucket_name:, file_name:
  # The ID of your GCS bucket
  # bucket_name = "your-unique-bucket-name"

  # The ID of your GCS object
  # file_name = "your-file-name"

  require "google/cloud/storage"

  storage = Google::Cloud::Storage.new
  bucket  = storage.bucket bucket_name, skip_lookup: true
  file    = bucket.file file_name

  file.delete

  puts "Deleted #{file.name}"
end

Rust

use google_cloud_storage::client::StorageControl;

pub async fn sample(client: &StorageControl, bucket_id: &str) -> anyhow::Result<()> {
    const NAME: &str = "deleted-object-name";
    client
        .delete_object()
        .set_bucket(format!("projects/_/buckets/{bucket_id}"))
        .set_object(NAME)
        // Consider .set_generation() to make request idempotent
        .send()
        .await?;
    println!("successfully deleted object {NAME} in bucket {bucket_id}");
    Ok(())
}

API REST

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 DELETE:

    curl -X DELETE \
      -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 da eliminare. Ad esempio, my-bucket.
    • OBJECT_NAME è il nome codificato nell'URL dell'oggetto che vuoi eliminare. Ad esempio, pets/dog.png, codificato come URL pets%2Fdog.png.

API XML

  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 XML con una richiesta DELETE Object:

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

    Dove:

    • BUCKET_NAME è il nome del bucket che contiene l'oggetto da eliminare. Ad esempio, my-bucket.
    • OBJECT_NAME è il nome codificato nell'URL dell'oggetto che vuoi eliminare. Ad esempio, pets/dog.png, codificato come URL pets%2Fdog.png.

Eliminare più oggetti contemporaneamente

Questa sezione mostra come eliminare gli oggetti collettivamente selezionandoli nella consoleGoogle Cloud , eliminando gli oggetti con un prefisso comune utilizzando gli strumenti a riga di comando o specificando un elenco di oggetti nelle richieste API o delle librerie client.

Console

  1. Nella console Google Cloud , vai alla pagina Bucket in Cloud Storage.

    Vai a Bucket

  2. Nell'elenco dei bucket, fai clic sul nome del bucket che contiene gli oggetti da eliminare.

    Si apre la pagina Dettagli bucket con la scheda Oggetti selezionata.

  3. Vai agli oggetti, che potrebbero trovarsi in una cartella.

  4. Seleziona la casella di controllo per ogni oggetto da eliminare.

    Puoi selezionare la casella di controllo di una cartella, che elimina tutti gli oggetti contenuti al suo interno.

  5. Fai clic su Elimina e poi su Elimina nella finestra di dialogo visualizzata.

Se elimini molti oggetti contemporaneamente, puoi monitorare l'avanzamento dell'eliminazione facendo clic sull'icona Notifiche nella console Google Cloud . La consoleGoogle Cloud può eliminare in blocco fino a diversi milioni di oggetti e lo fa in background.

Per scoprire come ottenere informazioni dettagliate sugli errori relativi alle operazioni di Cloud Storage non riuscite nella console Google Cloud , consulta Risoluzione dei problemi.

Riga di comando

Google Cloud CLI

Per eliminare gruppi di oggetti con lo stesso prefisso, ad esempio oggetti i cui nomi imitano una struttura di cartelle, utilizza il flag --recursive con gcloud storage rm:

gcloud storage rm --recursive gs://BUCKET_NAME/PREFIX

Dove:

  • BUCKET_NAME è il nome del bucket. Ad esempio, my-bucket.
  • PREFIX è il prefisso comune degli oggetti che vuoi eliminare. Ad esempio, pets/.

CLI Amazon S3

Per eliminare più oggetti in Cloud Storage utilizzando la CLI Amazon S3, utilizza il comando aws s3api delete-objects. Devi reindirizzare la richiesta all'API XML per l'eliminazione di più oggetti di Cloud Storage impostando il flag --endpoint-url su storage.googleapis.com. Per definizioni dettagliate dei parametri e comportamento dell'API delete-objects, consulta la documentazione di riferimento di Amazon S3 CLI delete-objects.

Librerie client

Cloud Storage supporta l'API XML per l'eliminazione di più oggetti tramite la sua interfaccia compatibile con Amazon S3. Per utilizzare librerie client compatibili con Amazon S3 per l'eliminazione collettiva di oggetti, indirizza la richiesta all'endpoint Google Cloud impostando l'URL dell'endpoint su https://storage.googleapis.com nella configurazione del client. Questo approccio può essere utile se esegui una delle seguenti attività:

  • Sfruttare le codebase o gli strumenti esistenti già creati per Amazon S3.
  • Mantenere la coerenza in ambienti multi-cloud che includono sia Amazon S3 che Cloud Storage.

L'esempio seguente mostra come inizializzare un client utilizzando una libreria Boto3 per interagire con Cloud Storage:

  import boto3
  def main():
  # Initialize the S3 client to point to the Google Cloud Storage endpoint
    client = boto3.client(
        service_name='s3',
        endpoint_url='https://storage.googleapis.com',
        aws_access_key_id='YOUR_ACCESS_ID',
        aws_secret_access_key='YOUR_SECRET',
    )
  # Perform delete operations as defined in the library's documentation
  # response = client.delete_objects(Bucket='BUCKET_NAME', Delete={'Objects': [...]})
  

Per firme di metodi e definizioni di parametri specifici, consulta la documentazione di Boto3 delete_objects.

API XML

Per eliminare fino a 1000 oggetti in una singola richiesta utilizzando l'API XML, completa i seguenti passaggi:

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

  2. Crea un documento XML che specifichi gli oggetti da eliminare.

    Per un elenco completo delle impostazioni, consulta Eliminare più oggetti nella documentazione di riferimento dell'API XML. Le impostazioni comuni da includere nel file XML sono le seguenti:

    <Delete>
        <Object>
          <Key>OBJECT_NAME</Key>
          <VersionId>VERSION_ID</VersionId>
        </Object>
        ...
        <Quiet>QUIET_RESPONSE_BOOLEAN</Quiet>
      </Delete>

    Dove:

    • OBJECT_NAME è il nome dell'oggetto codificato come URL. Ad esempio, pets/dog.png, codificato come URL pets%2Fdog.png. Puoi specificare fino a 1000 oggetti nel file XML.
    • VERSION_ID è l'ID versione dell'oggetto. Ad esempio: 11111.
    • QUIET_RESPONSE_BOOLEAN controlla il livello di dettaglio della risposta dell'API:
      • Imposta questo valore su False per una risposta dettagliata. La risposta include i dettagli di ogni oggetto, indipendentemente dal fatto che sia stato eliminato correttamente o meno. L'operazione di eliminazione di più oggetti tramite l'API XML non è atomica. Se una richiesta genera errori parziali, alcuni oggetti potrebbero essere eliminati correttamente, ma altri potrebbero non essere eliminati. Pertanto, ti consigliamo di utilizzare la risposta dettagliata per identificare tutte le eliminazioni di oggetti. Se hai abilitato gli audit log di accesso ai dati, puoi anche esaminare i log di controllo per i dettagli degli errori.
      • Imposta questo valore su True per una risposta silenziosa. Il corpo della risposta non include informazioni sugli oggetti eliminati correttamente.
  3. Utilizza curl per inviare una richiesta bucket POST all'API XML con il parametro di query ?delete e il tuo file XML:

    curl -X POST --data-binary @XML_FILE_NAME \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      "https://storage.googleapis.com/BUCKET_NAME?delete"

    Dove:

    • XML_FILE_NAME è il nome del file XML che hai creato.
    • BUCKET_NAME è il nome del bucket contenente gli oggetti da eliminare.

      Se la modalità Quiet è disattivata, una risposta dettagliata potrebbe essere simile alla seguente:

      <DeleteResult>
      <Deleted>
        <Key>images/photo1.jpg</Key>
        <VersionId>11111</VersionId>
      </Deleted>
      <Deleted>
        <Key>documents/report.pdf</Key>
        <VersionId>22222</VersionId>
      </Deleted>
      <Error>
        <Code>AccessDenied</Code>
        <Key>private/financial_data.xlsx</Key>
        <Message>Access Denied. You don't have permission to delete this object.</Message>
        <VersionId>33333</VersionId>
      </Error>
      </DeleteResult>
      

      Se la modalità Quiet è attivata, la risposta elenca solo gli oggetti che non sono stati eliminati. Se tutti gli oggetti vengono eliminati correttamente, viene restituito un tag <DeleteResult/> vuoto. Di seguito è riportato un esempio di risposta silenziosa in cui si è verificato un errore:

      <DeleteResult>
      <Error>
        <Code>AccessDenied</Code>
        <Key>private/financial_data.xlsx</Key>
        <Message>Access Denied. You don't have permission to delete this object.</Message>
        <VersionId>33333</VersionId>
      </Error>
      </DeleteResult>

Eliminare fino a miliardi di oggetti

Per eliminare milioni o miliardi di oggetti con un singolo job di eliminazione, utilizza le operazioni batch di archiviazione. Per creare un job, specifica gli oggetti da eliminare fornendo un elenco di oggetti in un file manifest o utilizzando i prefissi degli oggetti. Dopo aver specificato l'elenco degli oggetti, crea un job di operazioni batch per eliminare gli oggetti.

Eliminare automaticamente gli oggetti utilizzando le regole del ciclo di vita degli oggetti

Se vuoi che gli oggetti vengano eliminati automaticamente quando soddisfano i criteri che specifichi, ad esempio età o classe di archiviazione, utilizza la gestione del ciclo di vita degli oggetti. Ad esempio, puoi impostare una regola del ciclo di vita per eliminare i log più vecchi di 30 giorni.

Richieste di eliminazione degli oggetti batch con l'API JSON

Per ridurre il numero di connessioni HTTP necessarie quando elimini molti oggetti con l'API JSON, utilizza le richieste batch dell'API JSON. Puoi raggruppare fino a 100 chiamate API in un'unica richiesta HTTP per ridurre il sovraccarico della rete.

Passaggi successivi