Parallele zusammengesetzte Uploads

Eine Strategie zum Hochladen großer Dateien wird als parallele zusammengesetzte Uploads bezeichnet. Bei einem solchen Upload wird eine Datei in bis zu 32 Blöcke aufgeteilt. Die Blöcke werden parallel zu temporären Objekten hochgeladen, das endgültige Objekt wird mithilfe der temporären Objekte neu erstellt und die temporären Objekte werden gelöscht.

Parallele zusammengesetzte Uploads können erheblich schneller sein, wenn Netzwerk- und Laufwerksgeschwindigkeit keine einschränkenden Faktoren darstellen. Das letzte in Ihrem Bucket gespeicherte Objekt ist jedoch ein zusammengesetztes Objekt, das nur einen crc32c-Hash und keinen MD5-Hash hat. Daher müssen Sie crcmod verwenden, um Integritätsprüfungen durchzuführen, wenn Sie das Objekt mit Python-Anwendungen herunterladen. Sie sollten parallele zusammengesetzte Uploads nur ausführen, wenn Folgendes zutrifft:

  • Die hochgeladenen Objekte müssen keinen MD5-Hash haben.

  • Jeder Python-Nutzer, einschließlich gsutil-Nutzer, der Ihre Objekte herunterladen muss, hat entweder google-crc32c oder crcmod installiert.

    Wenn Sie beispielsweise Python verwenden, um Video-Assets hochzuladen, die nur von einer Java-Anwendung bereitgestellt werden, sind parallele zusammengesetzte Uploads eine gute Wahl, da in Java effiziente CRC32C-Implementierungen verfügbar sind.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Storage Object User (roles/storage.objectUser) für den Bucket zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Ausführen paralleler zusammengesetzter Uploads benötigen.

Die Rolle „Storage-Administrator“ (roles/storage.admin) enthält die Berechtigungen, die zum Hochladen, Lesen und Löschen von Objektblöcken erforderlich sind. Sie enthält auch die erforderliche Berechtigung für die gcloud CLI, um eine Kompatibilitätsprüfung auf Bucket-Ebene mit parallelen zusammengesetzten Uploads durchzuführen. Wenn Sie die Rolle „Storage-Administrator“ (roles/storage.admin) nicht erhalten können, können Sie trotzdem parallele zusammengesetzte Uploads mit der gcloud CLI ausführen, indem Sie die Rolle „Storage-Objekt-Nutzer“ (roles/storage.objectUser) erhalten und das Attribut storage/parallel_composite_upload_compatibility_check deaktivieren. Weitere Informationen finden Sie auf dem Tab Befehlszeile im Abschnitt So verwenden Tools und APIs parallele zusammengesetzte Uploads.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Eine Anleitung zum Zuweisen von Rollen für Buckets finden Sie unter IAM-Richtlinien für Buckets festlegen und verwalten.

So verwenden Tools und APIs parallele zusammengesetzte Uploads

Abhängig davon, wie Sie mit Cloud Storage interagieren, werden parallele zusammengesetzte Uploads möglicherweise automatisch in Ihrem Namen verwaltet. In diesem Abschnitt wird das Verhalten paralleler zusammengesetzter Uploads für verschiedene Tools beschrieben und es wird erläutert, wie Sie das Verhalten ändern können.

Console

Die Cloud de Confiance Console führt keine parallelen zusammengesetzten Uploads aus.

Befehlszeile

Die folgenden Attribute bestimmen zusammen, wie und wann die gcloud CLI parallele zusammengesetzte Uploads ausführt:

  • storage/parallel_composite_upload_enabled: Attribut zum Aktivieren paralleler zusammengesetzter Uploads. Bei False werden parallele zusammengesetzte Uploads deaktiviert und Kompatibilitätsprüfungen auf Bucket-Ebene übersprungen. Bei True oder None werden parallele zusammengesetzte Uploads für Objekte aktiviert, die die in den anderen Attributen definierten Kriterien erfüllen, und Kompatibilitätsprüfungen werden aktiviert. Die Standardeinstellung ist None.

  • storage/parallel_composite_upload_compatibility_check: Attribut zum Aktivieren/Deaktivieren von Prüfungen auf Bucket-Ebene auf Kompatibilität und Sicherheit mit parallelen zusammengesetzten Uploads. Bei True sendet die gcloud CLI eine GET-Anfrage für die Metadaten des Ziel-Buckets, bevor sie einen parallelen zusammengesetzten Upload versucht. Dazu muss das Hauptkonto die Berechtigung storage.buckets.get haben. Die gcloud CLI führt nur parallele zusammengesetzte Uploads aus, wenn alle folgenden Bedingungen erfüllt sind:

    Die Standardeinstellung ist True. Bei False führt die gcloud CLI die Kompatibilitätsprüfung nicht aus.

    Wenn Sie storage/parallel_composite_upload_compatibility_check auf False setzen, werden parallele zusammengesetzte Uploads nicht deaktiviert. Wenn storage/parallel_composite_upload_compatibility_check auf False und storage/parallel_composite_upload_enabled auf None oder True gesetzt ist, überspringt die gcloud CLI die Bucket-Prüfung und fährt direkt mit einem parallelen zusammengesetzten Upload fort.

    Wenn Sie diese Prüfung überspringen möchten, deaktivieren Sie das Attribut storage/parallel_composite_upload_compatibility_check:

    gcloud config set storage/parallel_composite_upload_compatibility_check False
    
  • storage/parallel_composite_upload_threshold: Die minimale Gesamtgröße der Datei für einen parallelen zusammengesetzten Upload. Die Standardeinstellung ist 150 MiB.

  • storage/parallel_composite_upload_component_size: Die maximale Größe für jedes temporäre Objekt. Das Attribut wird ignoriert, wenn die Datei insgesamt so groß ist, dass mehr als 32 Blöcke dieser Größe erforderlich wären.

  • storage/parallel_composite_upload_component_prefix: Das Präfix, das beim Benennen temporärer Objekte verwendet wird. Dieses Attribut kann entweder als absoluter Pfad oder als Pfad relativ zum endgültigen Objekt festgelegt werden. Weitere Informationen finden Sie in der Attributbeschreibung. Das Standardpräfix ist der absolute Pfad /gcloud/tmp/parallel_composite_uploads/see_gcloud_storage_cp_help_for_details.

Um diese Attribute zu ändern, erstellen Sie eine benannte Konfiguration und wenden diese entweder mit dem --configuration projektweiten Flag pro Befehl oder für alle gcloud CLI Befehle mit dem gcloud config set Befehl an.

Wenn Sie mit gcloud CLI parallele zusammengesetzte Uploads ausführen möchten, benötigen Sie keinen zusätzlichen lokalen Speicherplatz. Wenn ein paralleler zusammengesetzter Upload vor der Zusammensetzung fehlschlägt, führen Sie den gcloud CLI-Befehl noch einmal aus, um die Vorteile fortsetzbarer Uploads für die temporären Objekte zu nutzen, die fehlgeschlagen sind. Alle temporären Objekte, die vor dem Fehler erfolgreich hochgeladen wurden, werden beim Fortsetzen des Uploads nicht noch einmal hochgeladen.

Temporäre Objekte werden so benannt:

TEMPORARY_PREFIX/RANDOM_VALUE_HEX_DIGEST_COMPONENT_ID

Dabei gilt:

  • TEMPORARY_PREFIX wird durch das Attribut storage/parallel_composite_upload_component_prefix gesteuert.
  • RANDOM_VALUE ist ein zufälliger numerischer Wert.
  • HEX_DIGEST ist ein Hash, der aus dem Namen der Quellressource abgeleitet wird.
  • COMPONENT_ID ist die fortlaufende Nummer der Komponente.

Im Allgemeinen werden temporäre Objekte am Ende eines parallelen zusammengesetzten Uploads gelöscht. Damit keine doppelten temporären Objekte zurückbleiben, sollten Sie über den gcloud CLI-Befehl den Exit-Status prüfen und alle temporären Objekte, die Teil eines abgebrochenen Uploads waren, manuell löschen.

Clientbibliotheken

Java

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Java 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.

Legen Sie vor dem Ausführen von Codebeispielen die GOOGLE_CLOUD_UNIVERSE_DOMAIN Umgebung variable auf s3nsapis.fr fest.

Sie können parallele zusammengesetzte Uploads ausführen, indem Sie AllowParallelCompositeUpload auf true setzen. Beispiele:

import com.google.cloud.storage.transfermanager.ParallelUploadConfig;
import com.google.cloud.storage.transfermanager.TransferManager;
import com.google.cloud.storage.transfermanager.TransferManagerConfig;
import com.google.cloud.storage.transfermanager.UploadResult;
import java.io.IOException;
import java.nio.file.Path;
import java.util.List;

class AllowParallelCompositeUpload {

  public static void parallelCompositeUploadAllowed(String bucketName, List<Path> files)
      throws IOException {
    TransferManager transferManager =
        TransferManagerConfig.newBuilder()
            .setAllowParallelCompositeUpload(true)
            .build()
            .getService();
    ParallelUploadConfig parallelUploadConfig =
        ParallelUploadConfig.newBuilder().setBucketName(bucketName).build();
    List<UploadResult> results =
        transferManager.uploadFiles(files, parallelUploadConfig).getUploadResults();
    for (UploadResult result : results) {
      System.out.println(
          "Upload for "
              + result.getInput().getName()
              + " completed with status "
              + result.getStatus());
    }
  }
}

Node.js

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Node.js 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.

Legen Sie vor dem Ausführen von Codebeispielen die GOOGLE_CLOUD_UNIVERSE_DOMAIN Umgebung variable auf s3nsapis.fr fest.

Die Node.js-Clientbibliothek unterstützt keine parallelen zusammengesetzten Uploads. Verwenden Sie stattdessen mehrteilige XML API-Uploads.

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Python 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.

Legen Sie vor dem Ausführen von Codebeispielen die GOOGLE_CLOUD_UNIVERSE_DOMAIN Umgebung variable auf s3nsapis.fr fest.

Die Python-Clientbibliothek unterstützt keine parallelen zusammengesetzten Uploads. Verwenden Sie stattdessen mehrteilige XML API-Uploads.

REST APIs

JSON API

Die JSON API unterstützt das parallele Hochladen von Objektblöcken und das Zusammenführen in einem einzelnen Objekt mit dem compose Vorgang.

Beachten Sie beim Entwickeln von Code für parallele zusammengesetzte Uploads Folgendes:

  • Wenn Sie den Vorgang compose verwenden, können Sie die Quellobjekte im Rahmen des Zusammensetzungsprozesses endgültig löschen.

  • Um zu verhindern, dass Quellobjekte in der Zeit zwischen dem Hochladen und der Anfrage zur Zusammensetzung geändert werden, sollten allen Quellobjekten plausible Generierungsnummern zugewiesen werden.

XML API

Die XML API unterstützt das parallele Hochladen von Objektblöcken und das Zusammenführen in einem einzelnen Objekt mit dem compose Vorgang.

Beachten Sie beim Entwickeln von Code für parallele zusammengesetzte Uploads Folgendes:

  • Wenn Sie den compose-Vorgang verwenden, sind die Quellobjekte vom Zusammensetzungsprozess nicht betroffen.

    Wenn sie also temporär sein sollen, müssen Sie sie explizit löschen, nachdem die Zusammensetzung erfolgreich abgeschlossen wurde. Andernfalls verbleiben die Quellobjekte in Ihrem Bucket und werden entsprechend in Rechnung gestellt.

  • Um zu verhindern, dass Quellobjekte in der Zeit zwischen dem Hochladen und der Anfrage zur Zusammensetzung geändert werden, sollten allen Quellobjekten plausible Generierungsnummern zugewiesen werden.

Fehlerbehebung

In diesem Abschnitt finden Sie Informationen zur Fehlerbehebung bei gcloud CLI-Fehlern, die bei parallelen zusammengesetzten Uploads auftreten können.

Es kann nicht geprüft werden, ob der Ziel-Bucket mit parallelen zusammengesetzten Uploads kompatibel ist

Problem: Wenn Sie eine Datei mit einer Größe von mindestens 150 MiB mit gcloud storage cp oder gcloud storage mv hochladen, protokolliert der Befehl die folgende Meldung einmal, der Upload wird jedoch mit dem Exit-Code 0 abgeschlossen:

ERROR: Cannot check if the destination bucket is compatible for running
parallel composite uploads as the user does not permission to perform GET
operation on the bucket. The operation will be performed without parallel
composite upload feature and hence might perform relatively slower.

Lösung: Die gcloud CLI versucht, die Kompatibilitätsprüfung für parallele zusammengesetzte Uploads auszuführen. Das Hauptkonto hat nicht die Berechtigung storage.buckets.get für den Ziel-Bucket, daher wird die Anfrage für die Metadaten des Buckets abgelehnt. Die gcloud CLI verarbeitet den Fehler intern und zeigt keinen HTTP-Statuscode an. Stattdessen wird die Meldung protokolliert und auf einen regulären Upload zurückgegriffen.

Wenn Sie parallele zusammengesetzte Uploads verwenden möchten, muss das Hauptkonto die Berechtigungen storage.buckets.get, storage.objects.get und storage.objects.delete für den Ziel-Bucket haben. Diese Berechtigungen können über die Rolle „Storage-Administrator“ (roles/storage.admin) gewährt werden. Wenn das Hauptkonto die Berechtigungen storage.objects.get und storage.objects.delete bereits über eine Rolle wie „Storage-Objekt-Nutzer“ (roles/storage.objectUser) hat, kann es das Attribut storage/parallel_composite_upload_compatibility_check auf False setzen, um die Kompatibilitätsprüfung zu deaktivieren.

403: hat keinen Zugriff auf storage.objects.get

Problem: Uploads von Dateien mit einer Größe von weniger als 150 MiB sind erfolgreich, aber Uploads von Dateien mit einer Größe von mindestens 150 MiB schlagen mit dem Exit-Code 1 und einem Fehler ähnlich dem folgenden fehl:

HTTPError 403: PRINCIPAL does not have storage.objects.get access to
the Google Cloud Storage object.

Lösung: storage/parallel_composite_upload_compatibility_check ist auf False gesetzt und storage/parallel_composite_upload_enabled ist entweder auf None oder True gesetzt. In dieser Konfiguration überspringt die gcloud CLI die Bucket-Kompatibilitätsprüfung und fährt direkt mit einem parallelen zusammengesetzten Upload fort.

Die temporären Objekte werden erfolgreich hochgeladen, da das Hauptkonto die Berechtigung storage.objects.create hat. Für das Zusammensetzen der temporären Objekte zum endgültigen Objekt ist jedoch die Berechtigung storage.objects.get erforderlich und für das anschließende Löschen der temporären Objekte die Berechtigung storage.objects.delete.

Wählen Sie eine der folgenden Optionen, um dieses Problem zu beheben:

  • Wenn Sie keine parallelen zusammengesetzten Uploads benötigen, deaktivieren Sie sie:

    gcloud config set storage/parallel_composite_upload_enabled False
    

    Alle Dateien werden als reguläre Uploads hochgeladen und das Hauptkonto benötigt nur die Berechtigungen, die in der Rolle „Storage-Objekt-Ersteller“ (roles/storage.objectCreator) enthalten sind. Sie können storage/parallel_composite_upload_compatibility_check auf einen beliebigen Wert setzen.

  • Wenn Sie parallele zusammengesetzte Uploads benötigen, gewähren Sie dem Hauptkonto die Berechtigungen storage.objects.get und storage.objects.delete für den Ziel-Bucket. Diese Berechtigungen können über die Rolle „Storage-Objekt-Nutzer“ (roles/storage.objectUser) gewährt werden.

Wenn beim fehlgeschlagenen Upload temporäre Objekte in Ihrem Bucket verblieben sind, löschen Sie sie. Standardmäßig verwenden temporäre Objekte das Präfix gcloud/tmp/parallel_composite_uploads/see_gcloud_storage_cp_help_for_details. Zum Löschen temporärer Objekte, die durch einen fehlgeschlagenen Upload entstanden sind, benötigen Sie die Berechtigung storage.objects.delete.

Beachten Sie, dass der Befehl gcloud storage rsync sich anders verhält als gcloud storage cp und gcloud storage mv. Wenn das Ziel ein Bucket-Stammverzeichnis ist, z. B. gs://my-bucket, ist für gcloud storage rsync immer die Berechtigung storage.buckets.get erforderlich, um mit dem Bucket zu synchronisieren, unabhängig von Ihren Einstellungen für parallele zusammengesetzte Uploads. Wenn das Ziel ein Bucket-Unterverzeichnis ist, z. B. gs://my-bucket/dir/, ist für gcloud storage rsync die Berechtigung storage.buckets.get nicht erforderlich, sofern die Kompatibilitätsprüfung in Ihren Einstellungen für parallele zusammengesetzte Uploads deaktiviert ist. In diesem Fall benötigt gcloud storage rsync die Berechtigung storage.objects.get anstelle von storage.buckets.get.