Buckets verschieben und umbenennen

Wenn Sie einen Bucket erstellen, wird dessen Name, Standort und das Projekt, zu dem er gehört, dauerhaft definiert. Sie können Buckets jedoch effektiv verschieben oder umbenennen:

  • Wenn sich in Ihrem alten Bucket keine Daten befinden, löschen Sie den Bucket und erstellen einen anderen Bucket mit einem neuen Namen, an einem neuen Standort oder in einem neuen Projekt.

  • Enthält der alte Bucket Daten, erstellen Sie einen neuen Bucket mit dem gewünschten Namen, Standort und/oder Projekt. Kopieren Sie dann die Daten aus dem alten Bucket in den neuen und löschen Sie den alten Bucket und dessen Inhalt. Diese Vorgehensweise wird weiter unten im Detail beschrieben.

    Wenn der neue Bucket den Namen des alten Buckets erhalten soll, müssen Sie Ihre Daten zweimal verschieben: zuerst in einen Zwischen-Bucket, in dem die Daten vorübergehend aufbewahrt werden. Dann können Sie den ursprünglichen Bucket löschen und den Bucket-Namen für den endgültigen Bucket freigeben.

So verschieben Sie Daten aus einem Bucket in einen anderen:

Schritt 1: Neuen Bucket erstellen

Console

  1. Öffnen Sie den Cloud Storage-Browser in der Google Cloud Console.
    Zum Cloud Storage-Browser
  2. Klicken Sie auf Bucket erstellen, um das Formular zum Erstellen eines Buckets zu öffnen.
  3. Neuer Bucket

  4. Geben Sie die Bucket-Informationen ein und klicken Sie zum Ausführen der einzelnen Schritte jeweils auf Continue (Weiter):
    • Legen Sie einen Namen fest, der die Anforderungen für Bucket-Namen erfüllt.
    • Wählen Sie eine Standardspeicherklasse für den Bucket aus. Die Standardspeicherklasse wird standardmäßig allen in den Bucket hochgeladenen Objekten zugewiesen. Wählen Sie als Nächstes einen Standort aus, in dem die Bucket-Daten permanent gespeichert werden.

      Hinweis: Im Feld Schätzung monatliche Kosten im rechten Bereich finden Sie eine Schätzung der monatlichen Kosten für den Bucket auf Grundlage der ausgewählten Speicherklasse und dem ausgewählten Standort sowie der erwarteten Datengröße und den erwarteten Vorgängen.

    • Wählen Sie ein Zugriffssteuerungsmodell aus, das den Zugriff auf die Objekte des Buckets steuert.
    • Optional können Sie Bucket-Labels einfügen, eine Aufbewahrungsrichtlinie festlegen und eine Verschlüsselungsmethode auswählen.
  5. Klicken Sie auf Fertig.

gsutil

Führen Sie folgenden Befehl gsutil mb aus:

gsutil mb gs://[BUCKET_NAME]/

Wobei:

  • [BUCKET_NAME] ist der Name, den Sie dem Bucket gemäß den Benennungsanforderungen geben möchten. Beispiel: my-bucket

Mit den folgenden optionalen Flags können Sie das Erstellen des Buckets noch genauer steuern:

Beispiel:

  gsutil mb -p [PROJECT_ID] -c [STORAGE_CLASS] -l [BUCKET_LOCATION] -b on gs://[BUCKET_NAME]/

Codebeispiele

C++

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

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name) {
  StatusOr<gcs::BucketMetadata> bucket_metadata =
      client.CreateBucket(bucket_name, gcs::BucketMetadata());

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

  std::cout << "Bucket " << bucket_metadata->name() << " created."
            << "\nFull Metadata: " << *bucket_metadata << "\n";
}

C#

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

public static Bucket StorageCreateBucket(string projectId, string bucketName)
{
    var storage = StorageClient.Create();
    var bucket = storage.CreateBucket(projectId, bucketName);
    Console.WriteLine($"Created {bucketName}.");
    return bucket;
}

Go

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

ctx := context.Background()
bucket := client.Bucket(bucketName)

ctx, cancel := context.WithTimeout(ctx, time.Second*10)
defer cancel()
if err := bucket.Create(ctx, projectID, &storage.BucketAttrs{
	StorageClass: "COLDLINE",
	Location:     "asia",
}); err != nil {
	return err
}

Java

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

import com.google.cloud.storage.Bucket;
import com.google.cloud.storage.BucketInfo;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageClass;
import com.google.cloud.storage.StorageOptions;

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

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

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

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

    // See this documentation for other valid locations:
    // http://g.co/cloud/storage/docs/bucket-locations#location-mr
    String location = "asia";

    Bucket bucket =
        storage.create(
            BucketInfo.newBuilder(bucketName)
                .setStorageClass(storageClass)
                .setLocation(location)
                .build());

    System.out.println(
        "Created bucket "
            + bucket.getName()
            + " in "
            + bucket.getLocation()
            + " with storage class "
            + bucket.getStorageClass());
  }
}

Node.js

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

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

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

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

async function createBucket() {
  // Creates a new bucket in the Asia region with the coldline default storage
  // class. Leave the second argument blank for default settings.
  //
  // For default values see: https://cloud.google.com/storage/docs/locations and
  // https://cloud.google.com/storage/docs/storage-classes

  const [bucket] = await storage.createBucket(bucketName, {
    location: 'ASIA',
    storageClass: 'COLDLINE',
  });

  console.log(`Bucket ${bucket.name} created.`);
}

createBucket().catch(console.error);

PHP

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

use Google\Cloud\Storage\StorageClient;

/**
 * Create a Cloud Storage Bucket.
 *
 * @param string $bucketName name of the bucket to create.
 * @param string $options options for the new bucket.
 *
 */
function create_bucket($bucketName, $options = [])
{
    $storage = new StorageClient();
    $bucket = $storage->createBucket($bucketName, $options);
    printf('Bucket created: %s' . PHP_EOL, $bucket->name());
}

Python

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

from google.cloud import storage

def create_bucket(bucket_name):
    """Creates a new bucket."""
    # bucket_name = "your-new-bucket-name"

    storage_client = storage.Client()

    bucket = storage_client.create_bucket(bucket_name)

    print("Bucket {} created".format(bucket.name))

Ruby

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

# bucket_name   = "Name of Google Cloud Storage bucket to create"
# location      = "Location of where to create Cloud Storage bucket"
# storage_class = "Storage class of Cloud Storage bucket"

require "google/cloud/storage"

storage = Google::Cloud::Storage.new
bucket  = storage.create_bucket bucket_name,
                                location:      location,
                                storage_class: storage_class

puts "Created bucket #{bucket.name} in #{location}" +
     " with #{storage_class} class"

REST-APIs

JSON API

  1. Rufen Sie ein Zugriffstoken für die Autorisierung aus dem OAuth 2.0 Playground ab. Konfigurieren Sie den Playground so, dass Ihre eigenen OAuth-Anmeldedaten verwendet werden.
  2. Erstellen Sie eine JSON-Datei, die die folgenden Informationen enthält:
  3. {
      "name": "[BUCKET_NAME]",
      "location": "[BUCKET_LOCATION]",
      "storageClass": "[STORAGE_CLASS]"
    }

    Dabei gilt:

  4. Verwenden Sie cURL zum Aufrufen der JSON API:
    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?project=[PROJECT_ID]"

    Wobei:

    • [JSON_FILE_NAME] ist der Name der JSON-Datei, die Sie in Schritt 2 erstellt haben.
    • [OAUTH2_TOKEN] ist das Zugriffstoken, das Sie in Schritt 1 generiert haben.
    • [PROJECT_ID] ist die ID des Projekts, mit dem Ihr Bucket verknüpft wird. Beispiel: my-project.

XML API

  1. Rufen Sie ein Zugriffstoken für die Autorisierung aus dem OAuth 2.0 Playground ab. Konfigurieren Sie den Playground so, dass Ihre eigenen OAuth-Anmeldedaten verwendet werden.
  2. Erstellen Sie eine XML-Datei, die die folgenden Informationen enthält:
  3. <CreateBucketConfiguration>
       <LocationConstraint>[BUCKET_LOCATION]</LocationConstraint>
       <StorageClass>[STORAGE_CLASS]</StorageClass>
    </CreateBucketConfiguration>

    Dabei gilt:

  4. Verwenden Sie cURL zum Aufrufen der XML API:
    curl -X PUT --data-binary @[XML_FILE_NAME].xml \
         -H "Authorization: Bearer [OAUTH2_TOKEN]" \
         -H "x-goog-project-id: [PROJECT_ID]" \
         "https://storage.googleapis.com/[BUCKET_NAME]"

    Wobei:

    • [XML_FILE_NAME] ist der Name der XML-Datei, die Sie in Schritt 2 erstellt haben.
    • [OAUTH2_TOKEN] ist das Zugriffstoken, das Sie in Schritt 1 generiert haben.
    • [PROJECT_ID] ist die ID des Projekts, mit dem Ihr Bucket verknüpft wird. Beispiel: my-project.
    • [BUCKET_NAME] ist der Name, den Sie Ihrem Bucket gemäß den Benennungsanforderungen zuweisen möchten. Beispiel: my-bucket

Schritt 2: Dateien aus dem alten Bucket in den neuen kopieren

Console

Verwenden Sie in der Google Cloud Console den Cloud Storage Transfer Service, um Daten aus einem Cloud Storage-Bucket in einen anderen zu kopieren:

  1. Öffnen Sie in der Google Cloud Console die Seite "Übertragen".

    Öffnen Sie die Seite Übertragung.

  2. Klicken Sie auf Übertragungsjob erstellen.
  3. Führen Sie die folgenden Schritte aus und klicken Sie dabei nach jedem Schritt auf Weiter:

    • Quelle auswählen: Verwenden Sie Google Cloud Storage-Bucket als ausgewählte Quelle und klicken Sie auf Durchsuchen, um den Bucket auszuwählen, aus dem Sie die Objekte verschieben möchten.

    • Ziel auswählen: Klicken Sie auf Durchsuchen, um den Bucket auszuwählen, in den Sie die Objekte verschieben möchten.

      Aktivieren Sie außerdem das Kästchen Quellobjekte nach Übertragung löschen.

    • Übertragung konfigurieren: Diesen Abschnitt können Sie ignorieren.

  4. Nachdem Sie alle Schritte ausgeführt haben, klicken Sie auf Erstellen.

    Damit beginnt das Kopieren der Objekte aus dem alten Bucket in den neuen. Der Vorgang kann einige Zeit in Anspruch nehmen. Nachdem Sie auf Erstellen geklickt haben, können Sie die Google Cloud Console aber verlassen.

Zur Anzeige des Status der Übertragung rufen Sie in der Google Cloud Console die Seite "Übertragen" auf.

Öffnen Sie die Seite Übertragung.

gsutil

  1. Prüfen Sie, ob mindestens gsutil 4.12 installiert ist.
  2. Verwenden Sie den Befehl gsutil cp mit der Option -r, um alle Objekte rekursiv aus dem Quell-Bucket in den Ziel-Bucket zu kopieren:

    gsutil cp -r gs://[SOURCE_BUCKET]/* gs://[DESTINATION_BUCKET]

    Wobei:

    • [SOURCE_BUCKET] ist der Name des ursprünglichen Buckets. Beispiel: old-bucket.
    • [DESTINATION_BUCKET] ist der Name des neuen Buckets, den Sie in Schritt 1: Neuen Bucket erstellen erstellt haben. Beispiel: my-bucket

REST APIs

JSON API

Mit der rewrite-Methode der JSON API können Sie einzelne Datenblöcke in mehreren Anfragen kopieren. Dabei müssen Sie die rewrite-Methode in einer Schleife aufrufen, bis alle Daten übertragen wurden:

  1. Verwenden Sie cURL und die rewrite-Methode der JSON API, um Daten aus einem Quell-Bucket in einen Ziel-Bucket zu kopieren:

    curl -X POST \
    -H "Authorization: Bearer [OAUTH2_TOKEN]" \
    -H "Content-Length: 0" \
    "https://storage.googleapis.com/storage/v1/b/[SOURCE_BUCKET]/o/[OBJECT_NAME]/rewriteTo/b/[DESTINATION_BUCKET]/o/[OBJECT_NAME]"

    Wobei:

    • [OAUTH2_TOKEN] ist das Zugriffstoken, das Sie in Schritt 1 unter Schritt 1: Neuen Bucket erstellen erstellt haben.
    • [SOURCE_BUCKET] ist der Name des ursprünglichen Buckets. Beispiel: old-bucket.
    • [OBJECT_NAME] ist der Name des Objekts, das Sie kopieren möchten. Beispiel: pets/dog.png.
    • [DESTINATION_BUCKET] ist der Name des neuen Buckets, den Sie in Schritt 1: Neuen Bucket erstellen erstellt haben. Beispiel: my-bucket

    Wenn das Objekt beispielsweise 10 GB groß ist, sieht die Antwort auf diese Anfrage ungefähr so aus:

    {
    "kind": "storage#rewriteResponse",
    "totalBytesRewritten": 1048576,
    "objectSize": 10000000000,
    "done": false,
    "rewriteToken": [TOKEN_VALUE]
    }
  2. Verwenden Sie das rewriteToken in einer nachfolgenden Anfrage, um weitere Daten zu kopieren:

    curl -X POST \
    -H "Authorization: Bearer [OAUTH2_TOKEN]" \
    -H "Content-Length: 0" \
    -d '{"rewriteToken": "[TOKEN_VALUE]"}' \
    "https://storage.googleapis.com/storage/v1/b/[SOURCE_BUCKET]/o/[OBJECT_NAME]/rewriteTo/b/[DESTINATION_BUCKET]/o/[OBJECT_NAME]"

    Wobei:

    • [OAUTH2_TOKEN] ist das Zugriffstoken, das Sie in Schritt 1 unter Schritt 1: Neuen Bucket erstellen erstellt haben.
    • [TOKEN_VALUE] ist der in Schritt 1 zurückgegebene rewriteToken-Wert.
    • [SOURCE_BUCKET] ist der Name des ursprünglichen Buckets. Beispiel: old-bucket.
    • [OBJECT_NAME] ist der Name des Objekts, das Sie kopieren möchten. Beispiel: pets/bunny.png.
    • [DESTINATION_BUCKET] ist der Name des neuen Buckets, den Sie in Schritt 1: Neuen Bucket erstellen erstellt haben. Beispiel: my-bucket

Wenn alle Daten kopiert wurden, ist in der letzten Antwort das Attribut done auf true gesetzt und kein rewriteToken-Attribut vorhanden. Außerdem sind die Metadaten des kopierten Objekts im Attribut resource enthalten.

{
  "kind": "storage#rewriteResponse",
  "totalBytesRewritten": 10000000000,
  "objectSize": 10000000000,
  "done": true,
  "resource": objects Resource
}

Schritt 3: Objekte aus dem alten Bucket löschen

Console

Zum Löschen der Objekte aus dem alten Bucket müssen Sie nichts tun: Alte Objekte werden beim Kopieren von Objekten mit dem Übertragungsdienst automatisch gelöscht, vorausgesetzt, dass Sie das Kästchen "Quellobjekte nach Übertragung löschen" angeklickt haben.

gsutil

Verwenden Sie den Befehl gsutil rm mit der Option -r, um alle Objekte aus dem Quell-Bucket sowie den Quell-Bucket selbst rekursiv zu löschen:

gsutil rm -r gs://[SOURCE_BUCKET]

Dabei ist [SOURCE_BUCKET] der Name des ursprünglichen Buckets. Beispiel: old-bucket.

Sie können auch die Objekte löschen und den Quell-Bucket beibehalten:

gsutil rm -a gs://[SOURCE_BUCKET]/**

REST APIs

JSON API

  • Verwenden Sie cURL und die delete-Methode der JSON API, um die ursprüngliche Version der Daten mit dem folgenden Befehl zu entfernen:

    curl -X DELETE \
    -H "Authorization: Bearer [OAUTH2_TOKEN]" \
    "https://storage.googleapis.com/storage/v1/b/[SOURCE_BUCKET]/o/[OBJECT_NAME]"

    Wobei:

    • [OAUTH2_TOKEN] ist das Zugriffstoken, das Sie in Schritt 1 unter Schritt 1: Neuen Bucket erstellen erstellt haben.
    • [SOURCE_BUCKET] ist der Name des ursprünglichen Buckets. Beispiel: old-bucket.
    • [OBJECT_NAME] ist der Name des Objekts, das Sie löschen möchten. Beispiel: pets/dog.png

Bei Erfolg gibt die Methode eine leere Antwort zurück.

Weitere Informationen