Auf dieser Seite wird beschrieben, wie Sie mit den verwalteten Import- und Exportfunktionen Cloud Firestore-Daten von einem Projekt in ein anderes verschieben. Dies kann hilfreich sein, um eine Entwicklungsumgebung einzurichten oder um eine Anwendung dauerhaft in ein anderes Projekt zu migrieren. Das Beispiel auf dieser Seite zeigt, wie Sie Daten aus einem Quellprojekt exportieren und dann in ein Zielprojekt importieren. Das Verschieben von Daten zwischen Projekten umfasst die folgenden Schritte:
- Erstellen Sie einen Cloud Storage-Bucket, um die Daten aus Ihrem Quellprojekt zu speichern.
- Exportieren Sie die Daten aus Ihrem Quellprojekt in den Bucket.
- Geben Sie Ihrem Zielprojekt die Berechtigung zum Lesen aus dem Bucket.
- Importieren Sie die Daten aus dem Bucket in Ihr Zielprojekt.
Hinweise
Bevor Sie den verwalteten Export- und Importdienst verwenden können, müssen Sie die folgenden Schritte ausführen:
- Abrechnung für Quellprojekt und Zielprojekt aktivieren. Nur Google Cloud-Projekte mit aktivierter Abrechnung können die Export- und Importfunktion verwenden.
-
Stellen Sie sicher, dass Ihr Konto über die erforderlichen Cloud IAM-Berechtigungen in Ihrem Quellprojekt und Zielprojekt verfügt. Wenn Sie Project Owner für beide Projekte sind, hat Ihr Konto die erforderlichen Berechtigungen. Andernfalls gewähren die folgenden Cloud IAM-Rollen die erforderlichen Berechtigungen für Cloud Firestore-Export- und Importvorgänge:
Owner,Cloud Datastore OwneroderCloud Datastore Import Export AdminEin Project Owner kann eine dieser Rollen zuweisen. Folgen Sie dazu der Anleitung unter Zugriff gewähren.
-
Richten Sie das
gcloud-Befehlszeilentool ein und stellen Sie mit einer der folgenden Methoden eine Verbindung zu Ihrem Projekt her:-
Greifen Sie über die Google Cloud-Konsole mit Cloud Shell auf
gcloudzu.Achten Sie darauf, dass
gcloudfür das richtige Projekt konfiguriert ist:gcloud config set project [SOURCE_PROJECT_ID]
-
-
Richten Sie in Ihrem neuen Projekt Indexe ein. Die zusammengesetzten Indexe sollten zwischen den Quell- und Zielprojekten übereinstimmen. Indexe sollten zuerst eingerichtet werden, damit jedes Dokument nicht mehrmals verarbeitet werden muss.
Daten aus dem Quellprojekt exportieren
Exportieren Sie Ihre Daten, indem Sie einen Cloud Storage-Bucket für Ihre Cloud Firestore-Exportdateien erstellen und einen Exportvorgang starten.
Cloud Storage-Bucket erstellen
Erstellen Sie einen Cloud Storage-Bucket am selben Speicherort wie Ihre Cloud Firestore-Datenbank. Den Speicherort Ihrer Datenbank finden Sie in der Einstellung für den Projektstandort. Sie können einen Bucket mit der Funktion „Anforderer bezahlt“ oder einen Rapid-Bucket nicht für Export- und Importvorgänge verwenden.
Wenn sich Ihr Cloud Storage-Bucket nicht in Ihrem Quellprojekt befindet, müssen Sie dem Standarddienstkonto des Quellprojekts Zugriff auf den Bucket gewähren. Jedes Google Cloud-Projekt hat ein automatisch erstelltes Standarddienstkonto mit dem Namen PROJECT_ID@appspot.gserviceaccount.com. Cloud Firestore-Exportvorgänge verwenden dieses Standarddienstkonto, um Cloud Storage-Bucket-Vorgänge zu autorisieren. Weisen Sie dem Standarddienstkonto die Rolle Storage Admin zu, um ihm Zugriff auf den Quell-Bucket zu gewähren.
Sie können diese Rolle mit dem gsutil-Tool zuweisen, das in Cloud Shell verfügbar ist:
gsutil iam ch serviceAccount:[service-PROJECT_NUMBER]@gcp-sa-firestore.iam.gserviceaccount.com :roles/storage.admin\ gs://[BUCKET_NAME]@
Sie können diese Rolle auch in der Google Cloud Console zuweisen.
Schreibvorgänge deaktivieren (optional)
Wenn Ihre Anwendung während des Exports weiterhin in Ihre Datenbank schreibt, erfassen Sie möglicherweise nicht alle Schreibvorgänge in Ihren Exportdateien. Um Daten aus einem konsistenten Zustand zu exportieren, deaktivieren Sie Schreibvorgänge in Ihrer Datenbank, indem Sie Ihre Sicherheitsregeln aktualisieren und alle Admin SDK-Vorgänge anhalten.
Sicherheitsregeln aktualisieren
Rufen Sie in der Firebase Console den Tab Datenbanken und Speicher > Firestore > Regeln auf.
Aktualisieren Sie die Sicherheitsregeln Ihres Quellprojekts, um alle Schreibvorgänge abzulehnen. Beispiel:
// Deny write access to all users under any conditions service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow write: if false; } // Reads do not affect export operations // Add your read rules here } }Schreibvorgänge von Admin SDKs anhalten
Sicherheitsregeln verhindern keine Schreibvorgänge aus privilegierten Serverumgebungen, die mit einem Firebase Admin SDK oder einer Google Cloud Server-Clientbibliothek erstellt wurden. Halten Sie Schreibvorgänge von Ihren Admin-Servern an, indem Sie Ihre Server herunterfahren oder aktualisieren.
Exportvorgang starten
Verwenden Sie den Befehl gcloud firestore export, um Daten aus Ihrem Quellprojekt zu exportieren. Sie können alle Daten oder nur bestimmte Sammlungsgruppen exportieren. Ersetzen Sie [SOURCE_BUCKET] durch den Namen Ihres Cloud Storage-Buckets:
- Alle Daten exportieren
-
gcloud firestore export gs://[SOURCE_BUCKET] --async
- Bestimmte Sammlungsgruppen exportieren
-
gcloud firestore export gs://[SOURCE_BUCKET] --collection-ids=[COLLECTION_GROUP_ID_1],[COLLECTION_GROUP_ID_2] --async
Notieren Sie sich das outputURIPrefix des Exportvorgangs, da Sie es später noch benötigen. Standardmäßig fügt Cloud Firestore Ihren Exportdateien ein Präfix hinzu, das auf einem Zeitstempel basiert:
outputUriPrefix: gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418
Bei der Ausführung des Exports können Sie mit dem Befehl firestore operations list den Fortschritt den Vorgangs aufrufen:
gcloud firestore operations list
Daten in das Zielprojekt importieren
Gewähren Sie als Nächstes dem Zielprojekt Zugriff auf Ihre Cloud Firestore-Datendateien und starten Sie einen Importvorgang.
Zielprojekt Zugriff auf Datendateien gewähren
Bevor Sie einen Importvorgang starten können, müssen Sie dafür sorgen, dass Ihr Zielprojekt auf Ihre Cloud Firestore-Datendateien zugreifen kann.
Datendateien in einen lokalen Bucket verschieben
Wenn sich der Standort Ihres Quell-Buckets vom Standort Cloud Firestore Ihres Zielprojekts unterscheidet, müssen Sie Ihre Datendateien in einen Cloud Storage-Bucket am selben Standort wie Ihr Zielprojekt verschieben.
Verschieben Sie Ihre Datendateien in einen anderen Cloud Storage-Bucket. Folgen Sie dazu der Anleitung unter Buckets verschieben und umbenennen.
Verwenden Sie für alle folgenden Schritte diesen neuen Bucket als [SOURCE_BUCKET].
Dem Projektdienstkonto Zugriff auf Ihren Quell-Bucket geben
Wenn sich der Quell-Bucket nicht im Zielprojekt befindet, müssen Sie dem Standarddienstkonto des Zielprojekts Zugriff auf den Quell-Bucket gewähren. Das Standarddienstkonto heißt [DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com. Wenn Sie dem Standarddienstkonto Zugriff auf Ihren Quell-Bucket gewähren möchten, weisen Sie ihm die entsprechenden Berechtigungen für den Zugriff auf den Bucket zu.
Sie können die erforderlichen Rollen mit dem gsutil-Tool zuweisen, das in Cloud Shell verfügbar ist:
gsutil iam ch serviceAccount:[DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com:legacyBucketReader,legacyObjectReader \ gs://[SOURCE_BUCKET]
Sie können diese Rolle auch in der Google Cloud Console zuweisen.
Importvorgang starten
Stellen Sie vor dem Starten des Importvorgangs sicher, dass gcloud für das richtige Projekt konfiguriert ist:
gcloud config set project [DESTINATION_PROJECT_ID]
Verwenden Sie den Befehl gcloud firestore import, um die Daten in Ihrem Quell-Bucket in Ihr Zielprojekt zu importieren:
gcloud firestore import gs://[SOURCE_BUCKET]/[EXPORT_PREFIX] --async
Dabei entspricht [EXPORT_PREFIX] dem Präfix im outputUriPrefix des Exportvorgangs. Beispiel:
gcloud firestore import gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418 --async
Bei der Ausführung des Exports können Sie mit dem Befehl firestore operations list den Fortschritt den Vorgangs aufrufen:
gcloud firestore operations list