Przenoszenie danych między projektami

Na tej stronie opisano, jak używać funkcji zarządzanego importu i eksportu do przenoszenia danych Cloud Firestore z jednego projektu do drugiego. Może to być przydatne podczas konfigurowania środowiska programistycznego lub w ramach trwałej migracji aplikacji do innego projektu. Przykład na tej stronie pokazuje, jak wyeksportować dane z projektu źródłowego, a następnie zaimportować je do projektu docelowego. Przenoszenie danych między projektami obejmuje te kroki:

  1. Utwórz zasobnik Cloud Storage, w którym będą przechowywane dane z projektu źródłowego.
  2. Wyeksportuj dane z projektu źródłowego do zasobnika.
  3. Przyznaj projektowi docelowemu uprawnienia do odczytu z zasobnika.
  4. Zaimportuj dane z zasobnika do projektu docelowego.

Zanim zaczniesz

Zanim zaczniesz korzystać z zarządzanej usługi eksportu i importu, musisz wykonać te czynności:

  1. Włącz płatności zarówno w projekcie źródłowym, jak i docelowym. Funkcji eksportowania i importowania można używać tylko w projektach Google Cloud z włączonymi płatnościami.
  2. Upewnij się, że Twoje konto ma niezbędne uprawnienia Cloud IAM w projekcie źródłowym i docelowym. Jeśli jesteś właścicielem projektu dla obu projektów, Twoje konto ma wymagane uprawnienia. W przeciwnym razie te role uprawnień Cloud IAM przyznają uprawnienia niezbędne do operacji eksportowania i importowania Cloud Firestore:

    Owner, Cloud Datastore Owner lub Cloud Datastore Import Export Admin

    Właściciel projektu może przyznać jedną z tych ról, wykonując czynności opisane w artykule Przyznawanie dostępu.

  3. Skonfiguruj narzędzie wiersza poleceń gcloud i połącz się z projektem na jeden z tych sposobów:

  4. Skonfiguruj indeksy w nowym projekcie. Indeksy złożone powinny być zgodne między projektami źródłowymi i docelowymi. Indeksy należy skonfigurować najpierw, aby uniknąć wielokrotnego przetwarzania każdego dokumentu.

Eksportowanie danych z projektu źródłowego

Wyeksportuj dane, tworząc zasobnik Cloud Storage na pliki eksportu Cloud Firestore i rozpoczynając operację eksportu.

Tworzenie zasobnika Cloud Storage

Utwórz zasobnik Cloud Storage w tej samej lokalizacji co baza danych Cloud Firestore. Aby sprawdzić lokalizację bazy danych, zobacz ustawienie lokalizacji projektu. Do operacji eksportu i importu nie można używać zasobnika „płaci żądający” ani zasobnika Rapid.

Jeśli zasobnik Cloud Storage nie znajduje się w projekcie źródłowym, musisz przyznać domyślnemu kontu usługi projektu źródłowego dostęp do zasobnika. Każdy projekt Google Cloud ma automatycznie utworzone domyślne konto usługi o nazwie PROJECT_ID@appspot.gserviceaccount.com. Operacje eksportu Cloud Firestore używają tego domyślnego konta usługi do autoryzowania operacji na zasobnikach Cloud Storage. Aby przyznać domyślnemu kontu usługi dostęp do zasobnika źródłowego, przypisz mu rolę Storage Admin.

Możesz przyznać tę rolę za pomocą narzędzia gsutil dostępnego w Cloud Shell:

Rozpocznij Cloud Shell

gsutil iam ch serviceAccount:[service-PROJECT_NUMBER]@gcp-sa-firestore.iam.gserviceaccount.com :roles/storage.admin\
gs://[BUCKET_NAME]@

Możesz też przyznać tę rolę w konsoli Google Cloud.

Wyłącz operacje zapisu (opcjonalnie)

Jeśli podczas operacji eksportu aplikacja nadal zapisuje dane w bazie danych, możesz nie przechwycić wszystkich tych zapisów w plikach eksportu. Aby wyeksportować dane ze spójnego stanu, wyłącz zapisywanie w bazie danych, aktualizując reguły zabezpieczeń i zatrzymując wszystkie operacje pakietu Admin SDK.

  1. Zaktualizuj reguły zabezpieczeń

    W konsoli Firebase otwórz Bazy danych i miejsce na dane > Firestore > karta Reguły.

    Zaktualizuj reguły zabezpieczeń projektu źródłowego, aby odrzucać wszystkie operacje zapisu. Przykład:

      // 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. Zatrzymaj zapisywanie z pakietów Admin SDK

    Reguły zabezpieczeń nie blokują zapisów pochodzących z uprzywilejowanych środowisk serwerowych utworzonych za pomocą pakietu Admin SDK Firebase lub biblioteki klienta serwera Google Cloud. Pamiętaj, aby zatrzymać operacje zapisu z serwerów administracyjnych przez ich wyłączenie lub zaktualizowanie.

Rozpoczynanie operacji eksportu

Użyj polecenia gcloud firestore export, aby wyeksportować dane z projektu źródłowego. Możesz wyeksportować wszystkie dane lub tylko określone grupy kolekcji. Zastąp [SOURCE_BUCKET] nazwą zasobnika Cloud Storage:

Eksportuj wszystkie dane
gcloud firestore export gs://[SOURCE_BUCKET] --async
Eksportowanie określonych grup kolekcji
gcloud firestore export gs://[SOURCE_BUCKET] --collection-ids=[COLLECTION_GROUP_ID_1],[COLLECTION_GROUP_ID_2] --async

Zapisz outputURIPrefix operacji eksportu, ponieważ będzie on potrzebny później. Domyślnie Cloud Firestore dodaje do eksportowanych plików prefiks na podstawie sygnatury czasowej:

outputUriPrefix: gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418

Podczas operacji eksportowania możesz użyć polecenia firestore operations list, aby wyświetlić jej postęp:

gcloud firestore operations list

Importowanie danych do projektu docelowego

Następnie przyznaj projektowi docelowemu dostęp do plików danych Cloud Firestore i rozpocznij operację importowania.

Przyznawanie dostępu do plików danych projektowi docelowemu

Zanim rozpoczniesz operację importowania, musisz upewnić się, że Twój projekt docelowy ma dostęp do plików danych Cloud Firestore.

Przenoszenie plików danych do zasobnika lokalnego

Jeśli lokalizacja zasobnika źródłowego różni się od lokalizacji Cloud Firestore projektu docelowego, musisz przenieść pliki danych do zasobnika Cloud Storage w tej samej lokalizacji co projekt docelowy.

Przenieś pliki danych do innego zasobnika Cloud Storage, wykonując czynności opisane w artykule Przenoszenie zasobników i zmienianie ich nazw. We wszystkich kolejnych krokach używaj tego nowego zasobnika jako [SOURCE_BUCKET].

Przyznawanie kontu usługi projektu dostępu do zasobnika źródłowego

Jeśli zasobnik źródłowy nie znajduje się w projekcie docelowym, musisz przyznać domyślnemu kontu usługi projektu docelowego dostęp do zasobnika źródłowego. Domyślne konto usługi ma nazwę [DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com. Aby przyznać domyślnemu kontu usługi dostęp do zasobnika źródłowego, nadaj mu odpowiednie uprawnienia dostępu do zasobnika.

Niezbędne role możesz przypisać za pomocą narzędzia gsutil dostępnego w Cloud Shell:

Rozpocznij Cloud Shell

gsutil iam ch serviceAccount:[DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com:legacyBucketReader,legacyObjectReader \
gs://[SOURCE_BUCKET]

Możesz też przyznać tę rolę w konsoli Google Cloud.

Rozpoczynanie operacji importu

Zanim rozpoczniesz operację importowania, upewnij się, że narzędzie gcloud jest skonfigurowane dla właściwego projektu:

gcloud config set project [DESTINATION_PROJECT_ID]

Użyj polecenia gcloud firestore import, aby zaimportować dane z zasobnika źródłowego do projektu docelowego:

gcloud firestore import gs://[SOURCE_BUCKET]/[EXPORT_PREFIX] --async

[EXPORT_PREFIX] odpowiada prefiksowi w outputUriPrefix operacji eksportu. Przykład:

gcloud firestore import gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418 --async

Podczas operacji eksportowania możesz użyć polecenia firestore operations list, aby wyświetlić jej postęp:

gcloud firestore operations list