Verschieben Sie Daten zwischen Projekten

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:

  1. Erstellen Sie einen Cloud Storage-Bucket, um die Daten aus Ihrem Quellprojekt zu speichern.
  2. Exportieren Sie die Daten aus Ihrem Quellprojekt in den Bucket.
  3. Erteilen Sie Ihrem Zielprojekt die Berechtigung, aus dem Bucket zu lesen.
  4. 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:

  1. 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.
  2. 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 oder Cloud Datastore Import Export Admin

    Ein Projekteigentümer kann eine dieser Rollen gewähren, indem er die Schritte unter „Zugriff gewähren“ ausführt.

  3. Richten Sie das gcloud Befehlszeilentool ein und stellen Sie auf eine der folgenden Arten eine Verbindung zu Ihrem Projekt her:

  4. 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:

Starten Sie Cloud Shell

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.

  1. 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
        }
      }
    
  2. 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:

Starten Sie Cloud Shell

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