Objekte löschen

Auf dieser Seite wird beschrieben, wie Sie in Cloud Storage Objekte aus Buckets löschen. Eine Übersicht über die Methoden zum Löschen von Objekten finden Sie unter Objekte löschen.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für den Bucket zuzuweisen, der die zu löschenden Objekte enthält, um die Berechtigungen zu erhalten, die Sie zum Löschen benötigen:

  • Objekte mit der Google Cloud CLI oder REST APIs löschen: Storage Object User (roles/storage.objectUser)
  • Objekte über die Google Cloud Konsole löschen: Storage-Administrator (roles/storage.admin)
  • Alternativ können Sie Objekte über die Google Cloud -Konsole löschen: Betrachter (roles/viewer) und Storage-Objekt-Nutzer (roles/storage.objectUser)

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Diese vordefinierten Rollen enthalten die Berechtigungen, die zum Löschen von Objekten erforderlich sind. Maximieren Sie den Abschnitt Erforderliche Berechtigungen, um die notwendigen Berechtigungen anzuzeigen:

Erforderliche Berechtigungen

Die folgenden Berechtigungen sind zum Löschen von Objekten erforderlich:

  • Objekte löschen: storage.objects.delete
  • So listen Sie Objekte mit der Google Cloud Console oder mit dem Flag --recursive oder Platzhaltern in der Google Cloud CLI auf: storage.objects.list
  • So listen Sie Buckets über die Google Cloud Console auf: storage.buckets.list

Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.

Einzelnes Objekt löschen

In diesem Abschnitt wird beschrieben, wie Sie jeweils ein Objekt löschen.

So löschen Sie ein einzelnes Objekt:

Console

  1. Wechseln Sie in der Google Cloud Console unter „Cloud Storage“ zur Seite Buckets.

    Buckets aufrufen

  2. Klicken Sie in der Liste der Buckets auf den Bucket, der die Objekte enthält, die Sie löschen möchten.

    Die Seite Bucket-Details wird geöffnet und der Tab Objekte ist ausgewählt.

  3. Wechseln Sie zu dem Objekt. Dieses befindet sich möglicherweise in einem Ordner.

  4. Klicken Sie auf das Kästchen neben dem Objekt, das Sie löschen möchten.

  5. Klicken Sie auf Löschen und dann im angezeigten Dialogfeld noch einmal auf Löschen.

Befehlszeile

Verwenden Sie den Google Cloud CLI-Befehl gcloud storage rm:

gcloud storage rm gs://BUCKET_NAME/OBJECT_NAME

Dabei gilt:

  • BUCKET_NAME ist der Name des Buckets, der das zu löschende Objekt enthält. Beispiel: my-bucket.
  • OBJECT_NAME ist der Name des Objekts, das Sie löschen möchten. Beispiel: pets/dog.png.

Wenn der Vorgang erfolgreich war, sieht die Antwort in etwa so aus:

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

Clientbibliotheken

C++

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage C++ API.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

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#

Weitere Informationen finden Sie in der API-Referenzdokumentation zu Cloud Storage C#.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.


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

Weitere Informationen finden Sie in der API-Referenzdokumentation zu Cloud Storage Go.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

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

Weitere Informationen finden Sie in der API-Referenzdokumentation zu Cloud Storage Java.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

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

Weitere Informationen finden Sie in der API-Referenzdokumentation zu Cloud Storage Node.js.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

/**
 * 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

Weitere Informationen finden Sie in der API-Referenzdokumentation zu Cloud Storage PHP.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

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

Weitere Informationen finden Sie in der API-Referenzdokumentation zu Cloud Storage Python.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

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

Weitere Informationen finden Sie in der API-Referenzdokumentation zu Cloud Storage Ruby.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Cloud Storage zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

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(())
}

REST APIs

JSON-API

  1. Installieren und initialisieren Sie die gcloud CLI, um ein Zugriffstoken für den Authorization-Header zu generieren.

  2. Verwenden Sie curl, um die JSON API mit einer DELETE-Anfrage aufzurufen:

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

    Dabei gilt:

    • BUCKET_NAME ist der Name des Buckets, der das zu löschende Objekt enthält. Beispiel: my-bucket.
    • OBJECT_NAME ist der URL-codierte Name des Objekts, das Sie löschen möchten. Beispiel: pets/dog.png, URL-codiert als pets%2Fdog.png.

XML API

  1. Installieren und initialisieren Sie die gcloud CLI, um ein Zugriffstoken für den Authorization-Header zu generieren.

  2. Verwenden Sie curl, um die XML API mit einer DELETE Object-Anfrage aufzurufen:

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

    Dabei gilt:

    • BUCKET_NAME ist der Name des Buckets, der das zu löschende Objekt enthält. Beispiel: my-bucket.
    • OBJECT_NAME ist der URL-codierte Name des Objekts, das Sie löschen möchten. Beispiel: pets/dog.png, URL-codiert als pets%2Fdog.png.

Objekte im Bulk löschen

In diesem Abschnitt wird beschrieben, wie Sie Objekte im Bulk löschen, indem Sie sie in derGoogle Cloud -Konsole auswählen, Objekte mit einem gemeinsamen Präfix mit Befehlszeilentools löschen oder eine Liste von Objekten in API- oder Clientbibliotheksanfragen angeben.

Console

  1. Wechseln Sie in der Google Cloud Console unter „Cloud Storage“ zur Seite Buckets.

    Buckets aufrufen

  2. Klicken Sie in der Liste der Buckets auf den Bucket, der die Objekte enthält, die Sie löschen möchten.

    Die Seite Bucket-Details wird geöffnet und der Tab Objekte ist ausgewählt.

  3. Wechseln Sie zu den Objekten. Diese befinden sich möglicherweise in einem Ordner.

  4. Klicken Sie auf das Kästchen für jedes Objekt, das Sie löschen möchten.

    Sie können das Kästchen für einen Ordner auswählen, wodurch alle in diesem Ordner enthaltenen Objekte gelöscht werden.

  5. Klicken Sie auf Löschen und dann im angezeigten Dialogfeld noch einmal auf Löschen.

Wenn Sie viele Objekte gleichzeitig löschen, können Sie den Löschfortschritt verfolgen. Klicken Sie dazu in der Google Cloud Console auf das Symbol Benachrichtigungen. DieGoogle Cloud Console kann im Hintergrund bis zu mehrere Millionen Objekte im Bulk löschen.

Unter Fehlerbehebung erfahren Sie, wie Sie detaillierte Fehlerinformationen zu fehlgeschlagenen Cloud Storage-Vorgängen in der Google Cloud Console abrufen.

Befehlszeile

Google Cloud CLI

Wenn Sie Gruppen von Objekten mit demselben Präfix löschen möchten, z. B. Objekte, deren Namen eine Ordnerstruktur nachahmen, verwenden Sie das Flag --recursive mit gcloud storage rm:

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

Wobei:

  • BUCKET_NAME ist der Name des Buckets. Beispiel: my-bucket.
  • PREFIX ist das gemeinsame Präfix der Objekte, die Sie löschen möchten. Beispiel: pets/.

Amazon S3-Befehlszeile

Wenn Sie mehrere Objekte in Cloud Storage mit der Amazon S3-Befehlszeile löschen möchten, verwenden Sie den Befehl aws s3api delete-objects. Sie müssen die Anfrage an die XML API zum Löschen mehrerer Objekte von Cloud Storage weiterleiten, indem Sie das Flag --endpoint-url auf storage.googleapis.com setzen. Ausführliche Parameterdefinitionen und Informationen zum Verhalten der delete-objects-API finden Sie in der Amazon S3-CLI-Referenzdokumentation zu „delete-objects“.

Clientbibliotheken

Cloud Storage unterstützt die XML API zum Löschen mehrerer Objekte über die Amazon S3-kompatible Schnittstelle. Wenn Sie Amazon S3-kompatible Clientbibliotheken für das Löschen von Massenobjekten verwenden möchten, richten Sie Ihre Anfrage an den Endpunkt Google Cloud , indem Sie die Endpunkt-URL in der Clientkonfiguration auf https://storage.googleapis.com festlegen. Dieser Ansatz kann hilfreich sein, wenn Sie eine der folgenden Aufgaben ausführen:

  • Vorhandene Codebases oder Tools nutzen, die bereits für Amazon S3 entwickelt wurden.
  • Konsistenz in Multi-Cloud-Umgebungen mit Amazon S3 und Cloud Storage aufrechterhalten

Das folgende Beispiel zeigt, wie ein Client mit einer Boto3-Bibliothek initialisiert wird, um mit Cloud Storage zu interagieren:

  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': [...]})
  

Spezifische Methodensignaturen und Parameterdefinitionen finden Sie in der delete_objects-Dokumentation zu Boto3.

XML API

So löschen Sie mit der XML API bis zu 1.000 Objekte in einer einzigen Anfrage:

  1. Installieren und initialisieren Sie die gcloud CLI, um ein Zugriffstoken für den Authorization-Header zu generieren.

  2. Erstellen Sie ein XML-Dokument, in dem die zu löschenden Objekte angegeben sind.

    Eine vollständige Liste der Einstellungen finden Sie in der XML API-Referenzdokumentation unter Mehrere Objekte löschen. Die allgemeinen Einstellungen, die Sie in Ihre XML-Datei aufnehmen sollten, sind:

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

    Wobei:

    • OBJECT_NAME ist der URL-codierte Name des Objekts. Beispiel: pets/dog.png, URL-codiert als pets%2Fdog.png. Sie können bis zu 1.000 Objekte in der XML-Datei angeben.
    • VERSION_ID ist die Versions-ID für das Objekt. Beispiel: 11111
    • Mit QUIET_RESPONSE_BOOLEAN wird die Ausführlichkeit der API-Antwort gesteuert:
      • Legen Sie False für eine ausführliche Antwort fest. Die Antwort enthält Details zu jedem Objekt, unabhängig davon, ob es erfolgreich gelöscht wurde oder nicht. Der Vorgang zum Löschen mehrerer Objekte mit der XML API ist nicht atomar. Wenn eine Anfrage zu teilweisen Fehlern führt, werden einige Objekte möglicherweise erfolgreich gelöscht, andere jedoch nicht. Wir empfehlen daher, die ausführliche Antwort zu verwenden, um alle Objektlöschungen zu identifizieren. Wenn Sie Audit-Logs zum Datenzugriff aktiviert haben, können Sie auch Audit-Logs mit Fehlerdetails aufrufen.
      • Legen Sie True für eine stille Antwort fest. Der Antworttext enthält keine Informationen zu den Objekten, die erfolgreich gelöscht wurden.
  3. Verwenden Sie curl, um eine POST-Bucket-Anfrage mit dem Abfrageparameter ?delete und Ihrer XML-Datei an die XML API zu senden:

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

    Wobei:

    • XML_FILE_NAME ist der Name der XML-Datei, die Sie erstellt haben.
    • BUCKET_NAME ist der Name des Buckets, der die zu löschenden Objekte enthält.

      Wenn der Modus Quiet deaktiviert ist, könnte eine ausführliche Antwort so aussehen:

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

      Wenn der Modus Quiet aktiviert ist, werden in der Antwort nur Objekte aufgeführt, die nicht gelöscht werden konnten. Wenn alle Objekte erfolgreich gelöscht wurden, wird ein leeres <DeleteResult/>-Tag zurückgegeben. Im Folgenden sehen Sie ein Beispiel für eine stille Antwort, bei der ein Fehler aufgetreten ist:

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

Bis zu Milliarden von Objekten löschen

Wenn Sie Millionen oder Milliarden von Objekten mit einem einzigen Job zum Löschen von Objekten löschen möchten, verwenden Sie Storage-Batchvorgänge. Geben Sie zum Erstellen eines Jobs die zu löschenden Objekte an. Dazu können Sie entweder eine Liste von Objekten in einer Manifestdatei oder Objektpräfixe verwenden. Nachdem Sie die Objektliste angegeben haben, erstellen Sie einen Batchvorgangsjob, um die Objekte zu löschen.

Objekte mithilfe von Regeln zur Verwaltung des Objektlebenszyklus automatisch löschen

Wenn Objekte automatisch gelöscht werden sollen, wenn sie von Ihnen angegebene Kriterien wie Alter oder Speicherklasse erfüllen, verwenden Sie die Verwaltung des Objektlebenszyklus. Sie können beispielsweise eine Lebenszyklusregel festlegen, um Protokolle zu löschen, die älter als 30 Tage sind.

Löschanfragen für Objekte mit der JSON API im Batchverfahren senden

Wenn Sie viele Objekte mit der JSON API löschen, können Sie die Anzahl der erforderlichen HTTP-Verbindungen reduzieren, indem Sie JSON API-Batchanfragen verwenden. Sie können bis zu 100 API-Aufrufe in einer einzigen HTTP-Anfrage zusammenfassen, um den Netzwerkaufwand zu reduzieren.

Nächste Schritte