Storage Transfer Service kann zum Übertragen großer Datenmengen zwischen Cloud Storage-Buckets verwendet werden, entweder innerhalb desselben Google Cloud-Projekts oder zwischen verschiedenen Projekten.
Bucket-Migrationen sind in verschiedenen Szenarien hilfreich. Sie können verwendet werden, um Daten aus separaten Projekten zu konsolidieren, Daten an einen Sicherungsspeicherort zu verschieben, oder den Speicherort Ihrer Daten zu ändern.
Wann sollte der Storage Transfer Service verwendet werden?
Google Cloud bietet mehrere Optionen, um Daten zwischen Cloud Storage-Buckets zu übertragen. Wir empfehlen folgende Richtlinien:
Übertragung von weniger als 1 TB: Verwenden Sie
gcloud
. Eine Anleitung dazu finden Sie siehe Buckets verschieben und umbenennenMehr als 1 TB übertragen: Verwenden Sie Storage Transfer Service. Storage Transfer Service ist eine verwaltete Übertragungsoption, die sofort Sicherheit, Zuverlässigkeit und Leistung bietet. Es ist nicht mehr notwendig, Skripts zu optimieren, und Wiederholungsversuche.
In dieser Anleitung werden Best Practices für die Übertragung von Daten zwischen Cloud Storage-Buckets mit dem Storage Transfer Service erläutert.
Übertragungsstrategie definieren
Ihre Übertragungsstrategie hängt davon ab, wie komplex Situation. Berücksichtigen Sie in Ihrem Plan die folgenden Überlegungen.
Bucket-Namen auswählen
Wenn Sie Ihre Daten in einen Storage-Bucket mit einem anderen Speicherort verschieben möchten, wählen Sie eine der die folgenden Ansätze:
- Neuer Bucket-Name. Anwendungen so aktualisieren, dass sie auf einen Storage-Bucket verweisen mit einem anderen Namen.
- Bucket-Name beibehalten. Ersetzen Sie Ihren Storage-Bucket, um den aktuellen Namen beizubehalten. sodass Sie Ihre Anwendungen nicht aktualisieren müssen.
In beiden Fällen sollten Sie Ausfallzeiten einplanen und Ihre Nutzer entsprechend informieren dass die Ruhezeit bevorsteht. Lesen Sie die folgenden Erläuterungen, um zu verstehen, die beste Wahl für Sie ist.
Neuer Bucket-Name
Mit einem neuen Bucket-Namen müssen Sie den gesamten Code und alle Dienste aktualisieren, die Ihre aktuellen Bucket. Die Vorgehensweise hängt davon ab, wie Ihre Anwendungen aufgebaut sind und bereitgestellt.
Bei bestimmten Konfigurationen kann dieser Ansatz weniger Ausfallzeiten haben, erfordert aber mehr um einen reibungslosen Übergang zu gewährleisten. Dazu sind folgende Schritte erforderlich:
- Ihre Daten werden in einen neuen Storage-Bucket kopiert.
- Ruhezeit wird gestartet.
- Anwendungen aktualisieren, sodass sie auf den neuen Bucket verweisen
- Sie überprüfen, ob alles wie erwartet funktioniert und alle relevanten Systeme und Konten Zugriff auf den Bucket haben.
- Ursprünglicher Bucket wird gelöscht.
- Ihre Ruhezeit wird beendet.
Bucket-Name beibehalten
Verwenden Sie diesen Ansatz, wenn Sie Ihren Code nicht so ändern möchten, dass er auf einen neuen Bucket verweist. Namen. Dazu sind folgende Schritte erforderlich:
- Daten in einen temporären Storage-Bucket kopieren
- Ruhezeit wird gestartet.
- Ursprünglicher Bucket wird gelöscht.
- Erstellen Sie einen neuen Bucket mit demselben Namen wie der ursprüngliche Bucket.
- Kopieren Sie die Daten aus dem temporären Bucket in den neuen Bucket.
- Der temporäre Bucket wird gelöscht.
- Sie überprüfen, ob alles wie erwartet funktioniert und alle relevanten Systeme und Konten Zugriff auf den Bucket haben.
- Ihre Ruhezeit wird beendet.
Ausfallzeiten minimieren
Storage Transfer Service sperrt Lese- oder Schreibvorgänge nicht an der Quelle oder dem Ziel Buckets während einer Übertragung.
Wenn Sie Lese-/Schreibvorgänge in Ihrem Bucket manuell sperren, können Sie indem Sie Ihre Daten in zwei Schritten übertragen: Seed und Sync.
Seed-Übertragung: Führen Sie eine Bulk-Übertragung durch, ohne die Lese-/Schreibvorgänge für die Quelle zu sperren.
Übertragung synchronisieren: Sperren Sie nach Abschluss der ersten Ausführung den Lese-/Schreibmodus für Quell-Bucket und führen eine weitere Übertragung aus. Storage Transfer Service-Übertragungen sind standardmäßig inkrementell, sodass bei dieser zweiten Übertragung nur Daten übertragen werden. die sich während der Seed-Übertragung geändert hat.
Übertragungsgeschwindigkeit optimieren
Berücksichtigen Sie bei der Schätzung der Dauer eines Übertragungsjobs die möglichen und Engpässe erhalten. Wenn die Quelle z. B. Milliarden kleiner Dateien enthält, ist Ihre Übertragungsgeschwindigkeit QPS-gebunden. Wenn die Objektgröße groß ist, kann die Bandbreite der Engpass sein.
Bandbreitenlimits werden auf Regionsebene festgelegt und gleichmäßig auf alle Projekte verteilt. Wenn genügend Bandbreite verfügbar ist, kann der Storage Transfer Service etwa 1.000 Aufgaben pro Übertragungsjob pro Sekunde ausführen. Sie können eine Überweisung beschleunigen in indem Sie den Job in mehrere kleine Übertragungsjobs aufteilen, indem Sie Präfixe ein- und ausschließen, bestimmte Dateien zu übertragen.
Sind Speicherort, Speicherklasse und Verschlüsselungsschlüssel identisch, Storage Transfer Service erstellt keine neue Kopie der Byte. erstellt sie stattdessen eine neuen Metadateneintrag, der auf das Quell-Blob verweist. Folglich entspricht der Standort Kurskopien eines großen Korpus werden sehr schnell fertiggestellt und QPS-gebunden.
Löschvorgänge sind auch Metadatenvorgänge. Für diese Übertragungen wird in mehrere kleine Jobs aufzuteilen, kann die Geschwindigkeit erhöhen.
Metadaten beibehalten
Die folgenden Objektmetadaten werden beim Übertragen von Daten zwischen Cloud Storage-Buckets mit Storage Transfer Service:
- Vom Nutzer erstellte benutzerdefinierte Metadaten.
- Cloud Storage-Metadatenfelder mit festem Schlüssel, z. B. Cache-Control, Content-Disposition, Content-Type und Custom-Time.
- Objektgröße.
- Die Generierungsnummer wird beibehalten.
als benutzerdefiniertes Metadatenfeld mit dem Schlüssel
x-goog-reserved-source-generation
, das Sie später bearbeiten oder entfernen können.
Die folgenden Metadatenfelder können bei der Übertragung optional beibehalten werden mithilfe der API:
- ACLs (
acl
) - Speicherklasse (
storageClass
) - CMEK (
kmsKey
) - Vorübergehende Einbehaltung (
temporaryHold
) - Objekterstellungszeit (
customTime
)
Weitere Informationen in der TransferSpec
API-Referenz
.
Die folgenden Metadatenfelder werden nicht beibehalten:
- Zuletzt aktualisiert (
updated
) etag
componentCount
Wenn dies beibehalten wird, wird der Erstellungszeitpunkt des Objekts als benutzerdefiniertes Feld gespeichert.
customTime
Die updated
-Zeit des Objekts wird bei der Übertragung zurückgesetzt, sodass der Wert
Auch die in der Speicherklasse des Objekts verbrachte Zeit wird zurückgesetzt. Das bedeutet, dass ein Objekt
Coldline Storage muss nach der Übertragung für 90 Tage am
Ziel, um Gebühren für vorzeitiges Löschen zu vermeiden.
Sie können Ihre createTime
-basierten Lebenszyklusrichtlinien anwenden
mit customTime
. Vorhandene customTime
-Werte werden überschrieben.
Weitere Informationen dazu, was aufbewahrt wird und was nicht, finden Sie unter Aufbewahrung von Metadaten:
Versionierte Objekte verarbeiten
Wenn Sie alle Versionen Ihrer Speicherobjekte und nicht nur die
müssen Sie für die Übertragung entweder die gcloud
CLI oder die REST API verwenden
Ihre Daten kombiniert mit der Manifest-Funktion von Storage Transfer Service.
So übertragen Sie alle Objektversionen:
Listen Sie die Bucket-Objekte auf und kopieren Sie sie in eine JSON-Datei:
gcloud storage ls --all-versions --recursive --json [SOURCE_BUCKET] > object-listing.json
Dieser Befehl listet in der Regel etwa 1.000 Objekte pro Sekunde auf.
Teilen Sie die JSON-Datei in zwei CSV-Dateien auf, eine mit nicht aktuellen Versionen. und ein weiteres mit den Live-Versionen:
jq -r '.[] | select( .type=="cloud_object" and (.metadata | has("timeDeleted") | not)) | [.metadata.name, .metadata.generation] | @csv' object-listing.json > live-object-manifest.csv jq -r '.[] | select( .type=="cloud_object" and (.metadata | has("timeDeleted"))) | [.metadata.name, .metadata.generation] | @csv' object-listing.json > non-current-object-manifest.csv
Objektversionsverwaltung aktivieren für Ziel-Bucket
Übertragen Sie zuerst die nicht aktuellen Versionen zuerst. Übergeben Sie dazu die Manifestdatei
non-current-object-manifest.csv
als den Wert des FeldstransferManifest
.Übertragen Sie dann die Live-Versionen auf die gleiche Weise und geben Sie
live-object-manifest.csv
als Manifestdatei an.
Übertragungsoptionen konfigurieren
Bei der Einrichtung der Übertragung stehen Ihnen unter anderem folgende Optionen zur Verfügung: folgt:
Logging: Cloud Logging bietet detaillierte Logs einzelner Objekte, damit Sie den Übertragungsstatus und zusätzliche Datenintegritätsprüfungen prüfen können.
Filtern: Sie können Sie mit einschließenden und auszuschließenden Präfixen einschränken, welche Objekte Storage Transfer Service wird ausgeführt. Mit dieser Option kann eine Übertragung aufgeteilt werden in mehrere Übertragungsjobs aufgeteilt, sodass sie parallel ausgeführt werden können. Weitere Informationen finden Sie unter Optimieren Sie die Übertragungsgeschwindigkeit, Informationen.
Übertragungsoptionen: Sie können die Übertragung so konfigurieren, dass vorhandene Elemente im Ziel-Bucket; zum Löschen von Objekten am Ziel, die in das Set aus Übertragungen; oder übertragene Objekte aus der Quelle löschen.
Daten übertragen
Nachdem Sie Ihre Übertragungsstrategie definiert haben, können Sie die Übertragung selbst durchführen.
Neuen Bucket erstellen
Erstellen Sie einen Storage-Bucket, bevor Sie mit der Übertragung beginnen. Weitere Informationen findest du unter location_considerations. einen geeigneten Bucket-Speicherort auswählen.
Sie können einige der Bucket-Metadaten kopieren. wenn Sie den neuen Bucket erstellen. Siehe Bucket-Metadaten abrufen erfahren Sie, wie Sie die Metadaten des Quell-Buckets anzeigen, damit Sie die dieselben Einstellungen in Ihren neuen Bucket.
Objekte in den neuen Bucket kopieren
Sie können Objekte aus dem Quell-Bucket mit der Methode
Google Cloud Console, die gcloud
-Befehlszeile, die REST API oder Clientbibliotheken.
Für welchen Ansatz Sie sich entscheiden, hängt von Ihrer Übertragungsstrategie ab.
Die folgende Anleitung bezieht sich auf den grundlegenden Anwendungsfall der Objektübertragung von einem Bucket in einen anderen verschieben. Diese Anpassung sollte an Ihre Anforderungen angepasst werden.
Geben Sie keine vertraulichen Daten wie personenidentifizierbare Informationen an (PII) oder Sicherheitsdaten in den Namen des Übertragungsjobs ein. Ressourcennamen können an die Namen anderer Google Cloud-Ressourcen weitergegeben und Google-internen Systemen außerhalb Ihres Projekts zu implementieren.
Google Cloud Console
Verwenden Sie den Cloud Storage Transfer Service in der Google Cloud Console:
Öffnen Sie in der Google Cloud Console die Seite „Übertragen“.
- Klicken Sie auf Übertragung erstellen.
Führen Sie die folgenden Schritte aus und klicken Sie dabei nach jedem Schritt auf Nächster Schritt:
Erste Schritte: Verwenden Sie Google Cloud Storage als Quelltyp. und Zieltyp.
Wählen Sie eine Quelle aus: Geben Sie entweder den Namen des gewünschten Buckets direkt ein oder Klicken Sie auf Durchsuchen, um den gewünschten Bucket zu suchen und auszuwählen.
Ziel auswählen: Geben Sie entweder den Namen des gewünschten Buckets direkt ein oder klicken Sie auf Durchsuchen, um den gewünschten Bucket zu suchen und auszuwählen.
Einstellungen auswählen: Wählen Sie die Option Dateien nach der Übertragung aus der Quelle löschen aus.
Planungsoptionen: Diesen Abschnitt können Sie ignorieren.
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.
So sehen Sie den Fortschritt der Übertragung:
Öffnen Sie in der Google Cloud Console die Seite „Übertragen“.
Öffnen Sie die Seite Übertragung.
Weitere Informationen zum Abrufen detaillierter Fehlerinformationen zum fehlgeschlagenen Storage Transfer Service in der Google Cloud Console finden Sie unter Fehlerbehebung
Nach Abschluss der Übertragung müssen Sie nichts weiter tun, um die Objekte aus dem alten Bucket, wenn Sie die Option Quellobjekte löschen nachdem die Übertragung abgeschlossen ist. Sie können jedoch Ihren alten Bucket löschen, was Sie separat tun müssen.
gcloud-CLI
gcloud-CLI installieren
Installieren Sie das gcloud-Befehlszeilentool, falls noch nicht geschehen.
Rufen Sie dann gcloud init
auf, um das Tool zu initialisieren und Ihre Projekt-ID und Ihr Nutzerkonto anzugeben. Weitere Informationen finden Sie unter Cloud SDK initialisieren.
erhalten Sie weitere Informationen.
gcloud init
Dienstkonto dem Zielordner hinzufügen
Sie müssen dem Ziel-Bucket das Storage Transfer Service-Dienstkonto hinzufügen
bevor Sie eine Übertragung erstellen. Verwenden Sie dazu
gcloud storage buckets add-iam-policy-binding
:
gcloud storage buckets add-iam-policy-binding gs://bucket_name \ --member=serviceAccount:project-12345678@storage-transfer-service.iam.gserviceaccount.com \ --role=roles/storage.admin
Eine Anleitung zur Verwendung der Cloud Console oder der API finden Sie unter IAM-Berechtigungen verwenden in der Cloud Storage-Dokumentation.
Übertragungsjob erstellen
Verwenden Sie den Befehl gcloud transfer jobs create
, um einen neuen Übertragungsjob zu erstellen.
Durch das Erstellen eines neuen Jobs wird die angegebene Übertragung gestartet, es sei denn, ein Zeitplan oder
--do-not-run
ist angegeben.
gcloud transfer jobs create SOURCE DESTINATION
Wobei:
SOURCE ist die Datenquelle für diese Übertragung, im Format
gs://BUCKET_NAME
.DESTINATION ist Ihr neuer Bucket, im Format
gs://BUCKET_NAME
.
Weitere Optionen:
Jobinformationen: Sie können
--name
und--description
angeben.Zeitplan: Geben Sie
--schedule-starts
,--schedule-repeats-every
und--schedule-repeats-until
oder--do-not-run
an.Objektbedingungen: Mit Bedingungen können Sie bestimmen, welche Objekte übertragen werden. Dazu gehören
--include-prefixes
und--exclude-prefixes
sowie die zeitbasierten Bedingungen in--include-modified-[before | after]-[absolute | relative]
.Übertragungsoptionen: Geben Sie an, ob Zieldateien überschrieben werden sollen. (
--overwrite-when=different
oderalways
) und ob bestimmte Dateien während oder nach der Übertragung (--delete-from=destination-if-unique
odersource-after-transfer
); angeben welche [Metadatenwerte, die beibehalten werden sollen]Metadaten enthalten. und Legen Sie optional eine Speicherklasse für übertragene Objekte fest (--custom-storage-class
).Benachrichtigungen: Konfigurieren Sie Pub/Sub-Benachrichtigungen für Übertragungen mit
--notification-pubsub-topic
,--notification-event-types
und--notification-payload-format
.
Führen Sie gcloud transfer jobs create --help
aus, um alle Optionen anzuzeigen.
So übertragen Sie beispielsweise alle Objekte mit dem Präfix folder1
:
gcloud transfer jobs create gs://old-bucket gs://new-bucket \
--include-prefixes="folder1/"
REST
In diesem Beispiel erfahren Sie, wie Sie Dateien von einem Cloud Storage-Bucket in einen anderen verschieben. Sie können beispielsweise Daten in einen Bucket an einem anderen Speicherort bewegen.
Anfrage mit transferJobs create:
POST https://storagetransfer.googleapis.com/v1/transferJobs { "description": "YOUR DESCRIPTION", "status": "ENABLED", "projectId": "PROJECT_ID", "schedule": { "scheduleStartDate": { "day": 1, "month": 1, "year": 2025 }, "startTimeOfDay": { "hours": 1, "minutes": 1 }, "scheduleEndDate": { "day": 1, "month": 1, "year": 2025 } }, "transferSpec": { "gcsDataSource": { "bucketName": "GCS_SOURCE_NAME" }, "gcsDataSink": { "bucketName": "GCS_SINK_NAME" }, "transferOptions": { "deleteObjectsFromSourceAfterTransfer": true } } }
Lösung:
200 OK { "transferJob": [ { "creationTime": "2015-01-01T01:01:00.000000000Z", "description": "YOUR DESCRIPTION", "name": "transferJobs/JOB_ID", "status": "ENABLED", "lastModificationTime": "2015-01-01T01:01:00.000000000Z", "projectId": "PROJECT_ID", "schedule": { "scheduleStartDate": { "day": 1, "month": 1, "year": 2015 }, "startTimeOfDay": { "hours": 1, "minutes": 1 } }, "transferSpec": { "gcsDataSource": { "bucketName": "GCS_SOURCE_NAME", }, "gcsDataSink": { "bucketName": "GCS_NEARLINE_SINK_NAME" }, "objectConditions": { "minTimeElapsedSinceLastModification": "2592000.000s" }, "transferOptions": { "deleteObjectsFromSourceAfterTransfer": true } } } ] }
Clientbibliotheken
In diesem Beispiel erfahren Sie, wie Sie Dateien von einem Cloud Storage-Bucket in einen anderen verschieben. Sie können beispielsweise Daten in einen Bucket an einem anderen Speicherort replizieren.
Weitere Informationen zu den Storage Transfer Service-Clientbibliotheken finden Sie unter Erste Schritte mit Storage Transfer Service-Clientbibliotheken.
Java
Sie suchen nach älteren Beispielen? Weitere Informationen finden Sie im Migration Transfer Service-Migrationsleitfaden.
Python
Sie suchen nach älteren Beispielen? Weitere Informationen finden Sie im Migration Transfer Service-Migrationsleitfaden.
Kopierte Objekte prüfen
Wenn die Übertragung abgeschlossen ist, sollten Sie zusätzliche Datenintegritätsprüfungen durchführen.
Metadaten prüfen, um zu bestätigen, dass die Objekte korrekt kopiert wurden zu den Objekten wie Prüfsummen und Größe.
Prüfen Sie, ob die richtige Version der Objekte kopiert wurde. Storage Transfer Service bietet eine vorkonfigurierte Option, mit der Sie prüfen können, ob Objekte Kopien. Wenn Sie logging Logs zur Überprüfung ansehen ob alle Objekte kopiert wurden, einschließlich ihrer entsprechenden Metadatenfeldern.
Ziel-Bucket verwenden
Aktualisieren Sie nach Abschluss der Migration und Überprüfung alle vorhandenen Anwendungen oder Arbeitslasten, sodass sie den Namen des Ziel-Buckets verwenden. Datenzugriffslogs prüfen in Cloud-Audit-Logs, um sicherzustellen, Vorgänge ändern und lesen Objekte korrekt.
Ursprünglichen Bucket löschen
Wenn alles gut funktioniert, Löschen Sie den ursprünglichen Bucket.
Storage Transfer Service bietet die Möglichkeit, Objekte nach der Übertragung zu löschen. Geben Sie dazu in der Jobkonfiguration deleteObjectsFromSourceAfterTransfer: true
an oder wählen Sie die Option in der Cloud Console aus.
Löschen von Objekten planen
Wenn Sie das Löschen von Objekten zu einem späteren Zeitpunkt planen möchten, verwenden Sie eine Kombination aus einer
geplanten Übertragungsjob und den
deleteObjectsUniqueInSink = true
Option.
Der Übertragungsjob sollte so eingerichtet sein, dass ein leerer Bucket in den Bucket mit Ihren Objekten übertragen wird. Dadurch listet Storage Transfer Service die Objekte und damit beginnen, sie zu löschen. Da das Löschen ein reiner Metadatenvorgang ist, wird die Übertragung nur QPS-gebunden ist. Um den Vorgang zu beschleunigen, teilen Sie die Übertragung in mehrere Jobs, die jeweils auf einen eigenen Satz von Präfixen reagieren.
Alternativ bietet Google Cloud einen verwalteten Cronjob-Planer. Weitere Informationen finden Sie unter Google Cloud STS-Übertragungsjob mit Cloud Scheduler planen