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.
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. BeiFalsewerden parallele zusammengesetzte Uploads deaktiviert und Kompatibilitätsprüfungen auf Bucket-Ebene übersprungen. BeiTrueoderNonewerden 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 istNone.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. BeiTruesendet die gcloud CLI eineGET-Anfrage für die Metadaten des Ziel-Buckets, bevor sie einen parallelen zusammengesetzten Upload versucht. Dazu muss das Hauptkonto die Berechtigungstorage.buckets.gethaben. Die gcloud CLI führt nur parallele zusammengesetzte Uploads aus, wenn alle folgenden Bedingungen erfüllt sind:- Die Speicherklasse für das hochgeladene Objekt ist
STANDARD. - Für den Ziel-Bucket gibt es keine Aufbewahrungsrichtlinie.
- Im Ziel-Bucket sind keine Standard-Objekt-Holds aktiviert.
Die Standardeinstellung ist
True. BeiFalseführt die gcloud CLI die Kompatibilitätsprüfung nicht aus.Wenn Sie
storage/parallel_composite_upload_compatibility_checkaufFalsesetzen, werden parallele zusammengesetzte Uploads nicht deaktiviert. Wennstorage/parallel_composite_upload_compatibility_checkaufFalseundstorage/parallel_composite_upload_enabledaufNoneoderTruegesetzt 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- Die Speicherklasse für das hochgeladene Objekt ist
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_PREFIXwird durch das Attributstorage/parallel_composite_upload_component_prefixgesteuert.RANDOM_VALUEist ein zufälliger numerischer Wert.HEX_DIGESTist ein Hash, der aus dem Namen der Quellressource abgeleitet wird.COMPONENT_IDist 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:
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
composeverwenden, 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önnenstorage/parallel_composite_upload_compatibility_checkauf einen beliebigen Wert setzen.Wenn Sie parallele zusammengesetzte Uploads benötigen, gewähren Sie dem Hauptkonto die Berechtigungen
storage.objects.getundstorage.objects.deletefü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.