Przenoszenie danych między projektami

Na tej stronie dowiesz się, jak używać funkcji importowania i eksportowania zarządzanych, aby przenosić dane 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 eksportować dane z projektu źródłowego, a potem importować je do projektu docelowego. Przenoszenie danych między projektami obejmuje te kroki:

  1. Utwórz zasobnik Cloud Storage, aby przechowywać 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 usługi zarządzanego eksportu i importu, musisz wykonać te czynności:

  1. Włącz płatności zarówno w projekcie źródłowym, jak i w projekcie docelowym. Funkcji eksportowania i importowania mogą używać tylko projekty Google Cloud z włączonymi płatnościami.
  2. Upewnij się, że Twoje konto ma wymagane uprawnienia Cloud IAM w projekcie źródłowym i docelowym. Jeśli jesteś właścicielem obu projektów, Twoje konto ma wymagane uprawnienia. W przeciwnym razie te role Cloud IAM przyznają niezbędne uprawnienia do operacji eksportu i importu 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 sekcji Udzielanie dostępu.

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

  4. Skonfiguruj indeksy w nowym projekcie. Indeksy złożone powinny być takie same w projektach źródłowym i docelowym. Najpierw należy skonfigurować indeksy, aby uniknąć przetwarzania każdego dokumentu kilka razy.

Eksportowanie danych z projektu źródłowego

Wyeksportuj dane, tworząc zasobnik Cloud Storage dla plików eksportu Cloud Firestore i uruchamiając operację eksportu.

Utwórz zasobnik Cloud Storage

Utwórz zasobnik Cloud Storage w tej samej lokalizacji co baza danych Cloud Firestore. Aby sprawdzić lokalizację bazy danych, sprawdź ustawienia lokalizacji projektu. Nie możesz używać puli taryfy prośby o eksport i import.

Jeśli zasobnik Cloud Storage nie znajduje się w projekcie źródłowym, musisz przyznać do niego dostęp domyślnemu kontu usługi tego projektu. Każdy projekt Google Cloud ma automatycznie utworzone domyślne konto usługi o nazwie PROJECT_ID@appspot.gserviceaccount.com. Operacje eksportu Cloud Firestorekorzystają z domyślnego konta usługi do autoryzacji operacji na Cloud Storagebucketach. Aby przyznać domyślnemu kontu usługi dostęp do zasobnika źródłowego, przypisz do niego 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ż przypisać tę rolę w konsoli Google Cloud.

Wyłącz operacje zapisu (opcjonalnie)

Jeśli podczas eksportowania aplikacja nadal zapisuje dane w bazie danych, w plikach eksportu może nie być widoczne całe ich zapisywanie. Aby wyeksportować dane z konsekwentnego stanu, wyłącz zapisywanie w bazie danych, aktualizując reguły zabezpieczeń i zatrzymając wszystkie operacje pakietu Admin SDK.

  1. Aktualizowanie reguł zabezpieczeń

    Na konsoli Cloud Firestorena karcie Reguły zaktualizuj reguły zabezpieczeń projektu źródłowego, aby zablokować wszystkie zapisy. 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. Zatrzymanie zapisu z pakietów Admin SDK

    Reguły bezpieczeństwa nie blokują operacji zapisu pochodzących z uprzywilejowanych środowisk serwera utworzonych za pomocą pakietu Firebase Admin SDK lub Google Cloud Client Library. Zatrzymaj operacje zapisu na serwerach administracyjnych, wyłączając je lub aktualizując.

Rozpoczynanie operacji eksportowania

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

Eksportowanie wszystkich danych
gcloud firestore export gs://[SOURCE_BUCKET] --async
Eksportowanie określonych kolekcji
gcloud firestore export gs://[SOURCE_BUCKET] --collection-ids=[COLLECTION_ID_1],[COLLECTION_ID_2] --async

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

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

Podczas wykonywania operacji eksportu 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 docelowemu projektowi dostęp do plików danych Cloud Firestore i rozpocznij operację importowania.

Przyznawanie projektowi docelowemu dostępu do plików danych

Zanim rozpoczniesz importowanie, musisz się upewnić, że 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 i zmienianie nazwy zasobników. W kolejnych krokach użyj tego nowego zasobu jako [SOURCE_BUCKET].

Przyznaj kontu usługi projektu dostęp do zasobnika źródłowego

Jeśli źródłowy zasobnik nie znajduje się w docelowym projekcie, musisz przyznać domyślnemu kontu usługi docelowego projektu dostęp do źródłowego zasobnika. 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, przyznaj mu odpowiednie uprawnienia.

Wymagane role możesz przyznać 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ż przypisać tę rolę w konsoli Google Cloud.

Rozpoczynanie operacji importu

Zanim rozpoczniesz importowanie, upewnij się, że gcloud jest skonfigurowany w odpowiednim projekcie:

gcloud config set project [DESTINATION_PROJECT_ID]

Aby zaimportować dane z zasośnika źródłowego do projektu docelowego, użyj polecenia gcloud firestore import:

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

Gdzie [EXPORT_PREFIX] pasuje do prefiksu operacji eksportu outputUriPrefix. Przykład:

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

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

gcloud firestore operations list