Auf dieser Seite wird beschrieben, wie Sie die verwalteten Import- und Exportfunktionen verwenden, um Cloud Firestore-Daten von einem Projekt in ein anderes zu verschieben. Dies kann beim Einrichten einer Entwicklungsumgebung oder im Rahmen der dauerhaften Migration einer App in ein anderes Projekt nützlich sein. Das Beispiel auf dieser Seite zeigt, wie Sie Daten aus einem Quellprojekt exportieren und diese Daten 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.
- Erteilen Sie Ihrem Zielprojekt die Berechtigung, aus dem Bucket zu lesen.
- Importieren Sie die Daten aus dem Bucket in Ihr Zielprojekt.
Bevor Sie beginnen
Bevor Sie den verwalteten Export- und Importdienst verwenden können, müssen Sie die folgenden Aufgaben ausführen:
- Aktivieren Sie die Abrechnung sowohl für Ihr Quellprojekt als auch für Ihr Zielprojekt. Nur Google Cloud-Projekte mit aktivierter Abrechnung können die Export- und Importfunktion nutzen.
Stellen Sie sicher, dass Ihr Konto über die erforderlichen Cloud IAM-Berechtigungen in Ihrem Quellprojekt und Zielprojekt verfügt. Wenn Sie Projektinhaber beider Projekte sind, verfügt Ihr Konto über 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 Owner
oderCloud Datastore Import Export Admin
Ein Projekteigentümer kann eine dieser Rollen gewähren, indem er die Schritte unter „Zugriff gewähren“ ausführt.
Richten Sie das
gcloud
Befehlszeilentool ein und stellen Sie auf eine der folgenden Arten eine Verbindung zu Ihrem Projekt her:Greifen Sie über Cloud Shell über die Google Cloud Console auf
gcloud
zu.Stellen Sie sicher,
gcloud
für das richtige Projekt konfiguriert ist:gcloud config set project [SOURCE_PROJECT_ID]
Richten Sie Indizes in Ihrem neuen Projekt ein. Die zusammengesetzten Indizes sollten zwischen den Quell- und Zielprojekten übereinstimmen. Um zu vermeiden, dass jedes Dokument mehrmals verarbeitet werden muss, sollten zuerst Indizes eingerichtet werden.
Exportieren Sie Daten aus dem Quellprojekt
Exportieren Sie Ihre Daten, indem Sie einen Cloud Storage-Bucket für Ihre Cloud Firestore-Exportdateien erstellen und einen Exportvorgang starten.
Erstellen Sie einen Cloud Storage-Bucket
Erstellen Sie einen Cloud Storage-Bucket am selben Ort wie Ihre Cloud Firestore-Datenbank. Um den Speicherort Ihrer Datenbank anzuzeigen, sehen Sie sich die Standorteinstellungen Ihres Projekts an. Sie können einen Bucket „Anforderer zahlt“ 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 verfügt über 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. Um dem Standarddienstkonto Zugriff auf Ihren Quell-Bucket zu gewähren, weisen Sie ihm die Rolle Storage Admin
zu.
Sie können diese Rolle mit dem in Cloud Shell verfügbaren gsutil
Tool zuweisen:
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 App weiterhin in Ihre Datenbank schreibt, während Sie einen Exportvorgang ausführen, erfassen Sie möglicherweise nicht alle dieser Schreibvorgänge in Ihren Exportdateien. Um Daten aus einem konsistenten Zustand zu exportieren, deaktivieren Sie Schreibvorgänge in Ihre Datenbank, indem Sie Ihre Sicherheitsregeln aktualisieren und alle Admin SDK-Vorgänge anhalten.
Sicherheitsregeln aktualisieren
Aktualisieren Sie auf der Registerkarte „Cloud Firestore- Regeln“ der Konsole die Sicherheitsregeln Ihres Quellprojekts, um alle Schreibvorgänge zu verweigern. Zum 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 } }
Halt schreibt aus Admin-SDKs
Sicherheitsregeln verhindern nicht, dass Schreibvorgänge aus privilegierten Serverumgebungen erfolgen, die mit einem Firebase Admin SDK oder einer Google Cloud Server-Clientbibliothek erstellt wurden. Stellen Sie sicher, dass Sie Schreibvorgänge von Ihren Admin-Servern stoppen, indem Sie Ihre Server herunterfahren oder aktualisieren.
Starten Sie einen Exportvorgang
Verwenden Sie den Befehl gcloud firestore export
, um Daten aus Ihrem Quellprojekt zu exportieren. Sie können alle Ihre Daten oder nur bestimmte Sammlungen exportieren. Ersetzen Sie [SOURCE_BUCKET]
durch den Namen Ihres Cloud Storage-Buckets:
- Alle Daten exportieren
gcloud firestore export gs://[SOURCE_BUCKET] --async
- Exportieren Sie bestimmte Sammlungen
gcloud firestore export gs://[SOURCE_BUCKET] --collection-ids=[COLLECTION_ID_1],[COLLECTION_ID_2] --async
Notieren Sie sich outputURIPrefix
Ihres Exportvorgangs, da Sie es später verwenden werden. Standardmäßig fügt Cloud Firestore basierend auf einem Zeitstempel einen Präfix zu Ihren Exportdateien hinzu:
outputUriPrefix: gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418
Während der Exportvorgang ausgeführt wird, können Sie den Befehl firestore operations list
verwenden, um den Fortschritt Ihres Vorgangs anzuzeigen:
gcloud firestore operations list
Importieren Sie Daten in das Zielprojekt
Geben Sie als Nächstes dem Zielprojekt Zugriff auf Ihre Cloud Firestore-Datendateien und starten Sie einen Importvorgang.
Gewähren Sie dem Zielprojekt Zugriff auf Ihre Datendateien
Bevor Sie mit einem Importvorgang beginnen können, müssen Sie sicherstellen, dass Ihr Zielprojekt auf Ihre Cloud Firestore-Datendateien zugreifen kann.
Verschieben Sie Datendateien in einen lokalen Bucket
Wenn sich Ihr Quell-Bucket-Speicherort vom Cloud Firestore-Speicherort Ihres Zielprojekts unterscheidet, müssen Sie Ihre Datendateien in einen Cloud Storage-Bucket am selben Speicherort wie Ihr Zielprojekt verschieben.
Verschieben Sie Ihre Datendateien in einen anderen Cloud Storage-Bucket, indem Sie die Schritte unter Buckets verschieben und umbenennen befolgen. Verwenden Sie für alle folgenden Schritte diesen neuen Bucket als [SOURCE_BUCKET]
.
Gewähren Sie dem Projektdienstkonto Zugriff auf Ihren Quell-Bucket
Wenn sich Ihr Quell-Bucket nicht in Ihrem Zielprojekt befindet, müssen Sie dem Standarddienstkonto des Zielprojekts Zugriff auf Ihren Quell-Bucket gewähren. Das Standarddienstkonto heißt [DESTINATION_PROJECT_ID] @appspot.gserviceaccount.com
. Um dem Standarddienstkonto Zugriff auf Ihren Quell-Bucket zu gewähren, erteilen Sie ihm die entsprechenden Berechtigungen für den Zugriff auf den Bucket.
Sie können die erforderlichen Rollen mit dem in Cloud Shell verfügbaren gsutil
Tool zuweisen:
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 .
Starten Sie einen Importvorgang
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
Ihres Exportvorgangs. Zum Beispiel:
gcloud firestore import gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418 --async
Während der Exportvorgang ausgeführt wird, können Sie den Befehl firestore operations list
verwenden, um den Fortschritt Ihres Vorgangs anzuzeigen:
gcloud firestore operations list