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 Standort 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:
Weniger als 1 TB übertragen: Verwenden Sie
gsutil
odergcloud
. Eine Anleitung dazu finden Sie unter Buckets verschieben und umbenennen.Mehr 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 erforderlich, Skripts zu optimieren und zu verwalten sowie Wiederholungen zu bewältigen.
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
Wie Ihre Übertragungsstrategie aussieht, hängt von der Komplexität Ihrer Situation ab. Berücksichtigen Sie dabei Folgendes:
Bucket-Name auswählen
Wählen Sie eine der folgenden Optionen aus, um Ihre Daten in einen Storage-Bucket mit einem anderen Speicherort zu verschieben:
- Neuer Bucket-Name. Aktualisieren Sie Ihre Anwendungen so, dass sie auf einen Storage-Bucket mit einem anderen Namen verweisen.
- Bucket-Name beibehalten: Ersetzen Sie Ihren Storage-Bucket, um den aktuellen Namen zu behalten. So müssen Sie Ihre Anwendungen nicht aktualisieren.
In beiden Fällen sollten Sie eine Ausfallzeit planen und Ihre Nutzer rechtzeitig darüber informieren. Lesen Sie die folgenden Erläuterungen, um herauszufinden, welche Option für Sie am besten geeignet ist.
Neuer Bucket-Name
Bei einem neuen Bucket-Namen müssen Sie den gesamten Code und die Dienste aktualisieren, die Ihren aktuellen Bucket verwenden. Die Vorgehensweise hängt davon ab, wie Ihre Anwendungen erstellt und bereitgestellt werden.
Bei bestimmten Einrichtungen kann dieser Ansatz weniger Ausfallzeiten haben, erfordert jedoch mehr Arbeit für einen reibungslosen Übergang. Dazu sind folgende Schritte erforderlich:
- Daten in einen neuen Storage-Bucket kopieren
- Ruhezeit wird gestartet.
- Anwendungen werden so aktualisiert, dass sie auf den neuen Bucket verweisen.
- Prüfen, ob alles erwartungsgemäß funktioniert und alle relevanten Systeme und Konten Zugriff auf den Bucket haben
- Ursprünglichen Bucket löschen
- Ruhezeit beenden.
Bucket-Name behalten
Verwenden Sie diesen Ansatz, wenn Sie den Code nicht so ändern möchten, dass er auf einen neuen Bucket-Namen verweist. Dazu sind folgende Schritte erforderlich:
- Daten in einen temporären Storage-Bucket kopieren
- Ruhezeit wird gestartet.
- Ursprünglichen Bucket löschen
- Sie erstellen einen neuen Bucket mit demselben Namen wie der ursprüngliche Bucket.
- Daten aus dem temporären Bucket in den neuen Bucket kopieren
- Temporären Bucket löschen
- Prüfen, ob alles erwartungsgemäß funktioniert und alle relevanten Systeme und Konten Zugriff auf den Bucket haben
- Ruhezeit beenden.
Ausfallzeiten minimieren
Storage Transfer Service sperrt während einer Übertragung keine Lese- oder Schreibvorgänge in den Quell- oder Ziel-Buckets.
Wenn Sie Lese-/Schreibvorgänge für den Bucket manuell sperren, können Sie die Ausfallzeit durch Übertragung der Daten in zwei Schritten minimieren: Seed und Synchronisierung.
Seed-Übertragung: Führen Sie eine Bulk-Übertragung durch, ohne die Lese-/Schreibvorgänge für die Quelle zu sperren.
Synchronisierung übertragen: Sperren Sie nach der ersten Ausführung den Lese-/Schreibvorgang im Quell-Bucket und führen Sie eine weitere Übertragung durch. Storage Transfer Service-Übertragungen erfolgen standardmäßig inkrementell, sodass bei dieser zweiten Übertragung nur Daten übertragen werden, die sich während der Quellübertragung geändert haben.
Übertragungsgeschwindigkeit optimieren
Berücksichtigen Sie bei der Schätzung der Dauer eines Übertragungsjobs die möglichen Engpässe. Wenn die Quelle beispielsweise Milliarden kleiner Dateien hat, ist Ihre Übertragungsgeschwindigkeit an die Zahl der Abfragen pro Sekunde 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 Übertragung in diesem Fall beschleunigen, indem Sie den Job in mehrere kleine Übertragungsjobs aufteilen, beispielsweise mit Präfixen ein- und ausschließen, um bestimmte Dateien zu übertragen.
Wenn Speicherort, Speicherklasse und Verschlüsselungsschlüssel identisch sind, erstellt Storage Transfer Service keine neue Kopie der Byte, sondern erstellt einen neuen Metadateneintrag, der auf das Quell-Blob verweist. Daher werden dieselben Standorte und Klassenkopien eines großen Korpus sehr schnell erstellt und sind nur an die Abfragen pro Sekunde gebunden.
Löschvorgänge sind auch Metadatenvorgänge. Bei diesen Übertragungen kann die Geschwindigkeit erhöht werden, indem die Übertragung durch Aufteilen in mehrere kleine Jobs parallelisiert wird.
Metadaten beibehalten
Die folgenden Objektmetadaten bleiben beim Übertragen von Daten zwischen Cloud Storage-Buckets mit Storage Transfer Service erhalten:
- 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 als benutzerdefiniertes Metadatenfeld mit dem Schlüssel
x-goog-reserved-source-generation
beibehalten. Sie können ihn später bearbeiten oder entfernen.
Die folgenden Metadatenfelder können bei der Übertragung über die API optional beibehalten werden:
- ACLs (
acl
) - Speicherklasse (
storageClass
) - CMEK (
kmsKey
) - Vorübergehende Einbehaltung (
temporaryHold
) - Erstellungszeit des Objekts (
customTime
)
Weitere Informationen finden Sie in der API-Referenz zur TransferSpec
.
Die folgenden Metadatenfelder werden nicht beibehalten:
- Zuletzt aktualisiert:
updated
etag
componentCount
Wenn dies beibehalten wird, wird die Objekterstellungszeit als benutzerdefiniertes Feld customTime
gespeichert. Die updated
-Zeit des Objekts wird bei der Übertragung zurückgesetzt, sodass auch die Zeit, die das Objekt in seiner Speicherklasse verbringt, zurückgesetzt wird. Das bedeutet, dass ein Objekt nach der Übertragung in Coldline Storage noch 90 Tage lang am Ziel vorhanden sein muss, um Gebühren für vorzeitiges Löschen zu vermeiden.
Sie können Ihre createTime
-basierten Lebenszyklusrichtlinien mit customTime
anwenden. Vorhandene customTime
-Werte werden überschrieben.
Weitere Informationen dazu, was beibehalten wird und was nicht, finden Sie unter Beibehaltung der Metadaten.
Versionierte Objekte verarbeiten
Wenn Sie alle Versionen Ihrer Speicherobjekte und nicht nur die neueste Version übertragen möchten, müssen Sie entweder die gcloud
-Befehlszeile oder die REST API verwenden, um Ihre Daten zu übertragen, zusammen mit der Manifestdatei des 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 eine 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
Aktivieren Sie die Objektversionsverwaltung für den 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
Beim Einrichten der Übertragung stehen Ihnen unter anderem folgende Optionen zur Verfügung:
Logging: Cloud Logging bietet detaillierte Logs einzelner Objekte, damit Sie den Übertragungsstatus und zusätzliche Datenintegritätsprüfungen prüfen können.
Filter: Mit Präfixen zum Einschließen und Ausschließen lässt sich einschränken, mit welchen Objekten der Storage Transfer Service arbeitet. Diese Option kann verwendet werden, um eine Übertragung in mehrere Übertragungsjobs aufzuteilen, damit sie parallel ausgeführt werden können. Weitere Informationen finden Sie unter Übertragungsgeschwindigkeit optimieren.
Übertragungsoptionen: Sie können Ihre Übertragung so konfigurieren, dass vorhandene Elemente im Ziel-Bucket überschrieben werden, Objekte im Ziel, die nicht im Übertragungsset vorhanden sind, oder gelöschte Objekte aus der Quelle gelöscht werden.
Daten übertragen
Nachdem Sie die Übertragungsstrategie definiert haben, können Sie die Übertragung selbst ausführen.
Neuen Bucket erstellen
Erstellen Sie einen Storage-Bucket, bevor Sie mit der Übertragung beginnen. Informationen zum Auswählen eines geeigneten Bucket-Standorts finden Sie unter location_Überlegungen.
Sie können beim Erstellen des neuen Buckets einige der Bucket-Metadaten kopieren. Unter Metadaten für Buckets abrufen erfahren Sie, wie Sie die Metadaten des Quell-Buckets anzeigen lassen, damit Sie dieselben Einstellungen auf Ihren neuen Bucket anwenden können.
Objekte in den neuen Bucket kopieren
Sie können Objekte aus dem Quell-Bucket in einen neuen Bucket kopieren. Verwenden Sie dazu die Google Cloud Console, die gcloud
-Befehlszeile, die REST API oder Clientbibliotheken.
Welcher Ansatz Sie auswählen, hängt von Ihrer Übertragungsstrategie ab.
Die folgende Anleitung gilt für den grundlegenden Anwendungsfall der Übertragung von Objekten von einem Bucket in einen anderen und sollte an Ihre Anforderungen angepasst werden.
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:
Einstieg: Verwenden Sie Google Cloud Storage sowohl als Quelltyp als auch als Zieltyp.
Quelle auswählen: Geben Sie entweder direkt den Namen des gewünschten Buckets ein oder klicken Sie auf Durchsuchen, um den gewünschten Bucket 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.
Wie Sie detaillierte Fehlerinformationen zu fehlgeschlagenen Storage Transfer Service-Vorgängen in der Google Cloud Console abrufen, erfahren Sie unter Fehlerbehebung.
Wenn die Übertragung abgeschlossen ist, müssen Sie nichts tun, um die Objekte aus Ihrem alten Bucket zu löschen, wenn Sie während der Einrichtung das Kästchen Quellobjekte nach Übertragung löschen angeklickt haben. Möglicherweise möchten Sie jedoch auch Ihren alten Bucket löschen. Dies müssen Sie separat tun.
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.
gcloud init
Dienstkonto dem Zielordner hinzufügen
Sie müssen das Storage Transfer Service-Dienstkonto Ihrem Ziel-Bucket hinzufügen, bevor Sie eine Übertragung erstellen. Verwenden Sie dazu gsutil iam ch
:
gsutil iam ch serviceAccount:project-12345678@storage-transfer-service.iam.gserviceaccount.com:roles/storage.admin gs://bucket_name
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 initiiert, sofern kein Zeitplan oder --do-not-run
angegeben ist.
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 (
--overwrite-when=different
oderalways
) überschrieben werden sollen und ob bestimmte Dateien während oder nach der Übertragung (--delete-from=destination-if-unique
odersource-after-transfer
) gelöscht werden sollen. Geben Sie außerdem an, welche [Metadatenwerte beibehalten werden sollen]Metadaten; 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 bestätigen
Wenn die Übertragung abgeschlossen ist, sollten Sie zusätzliche Datenintegritätsprüfungen durchführen.
Prüfen Sie, ob die Objekte korrekt kopiert wurden. Prüfen Sie dazu die Metadaten der Objekte wie Prüfsummen und Größe.
Prüfen Sie, ob die richtige Version der Objekte kopiert wurde. Storage Transfer Service bietet eine vorkonfigurierte Option zum Prüfen, ob Objekte Kopien sind. Wenn Sie Logging aktiviert haben, prüfen Sie mit den Logs, ob alle Objekte kopiert wurden, einschließlich der entsprechenden Metadatenfelder.
Ziel-Bucket verwenden
Aktualisieren Sie nach Abschluss der Migration alle vorhandenen Anwendungen oder Arbeitslasten, damit sie den Ziel-Bucket-Namen verwenden. Prüfen Sie die Datenzugriffslogs in den Cloud-Audit-Logs, um sicherzustellen, dass Ihre Vorgänge Objekte richtig ändern und lesen.
Ursprünglichen Bucket löschen
Wenn alles 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 Ihrer Objekte zu einem späteren Zeitpunkt planen möchten, verwenden Sie eine Kombination aus einem geplanten Übertragungsjob und der Option deleteObjectsUniqueInSink = true
.
Der Übertragungsjob sollte so eingerichtet sein, dass ein leerer Bucket in den Bucket mit Ihren Objekten übertragen wird. Dies führt dazu, dass Storage Transfer Service die Objekte auflistet und mit dem Löschen beginnt. Da Löschvorgänge nur Metadaten enthalten, ist der Übertragungsjob nur an Abfragen pro Sekunde gebunden. Teilen Sie die Übertragung in mehrere Jobs auf, die jeweils mit einem bestimmten Satz von Präfixen arbeiten, um den Vorgang zu beschleunigen.
Alternativ bietet Google Cloud einen verwalteten Cronjob-Planer. Weitere Informationen finden Sie unter Google Cloud STS-Übertragungsjob mit Cloud Scheduler planen.