Przenieś dane 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 przy konfigurowaniu ś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 pomiędzy projektami obejmuje następujące kroki:

  1. Utwórz zasobnik Cloud Storage do przechowywania danych z projektu źródłowego.
  2. Wyeksportuj dane z projektu źródłowego do zasobnika.
  3. Daj projektowi docelowemu uprawnienia do odczytu z zasobnika.
  4. Zaimportuj dane z zasobnika do projektu docelowego.

Zanim zaczniesz

Zanim będzie można skorzystać z usługi zarządzanego eksportu i importu, należy wykonać następujące zadania:

  1. Włącz rozliczenia zarówno dla projektu źródłowego, jak i docelowego. Tylko projekty Google Cloud z włączonymi rozliczeniami mogą korzystać z funkcji eksportu i importu.
  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 obu projektów, Twoje konto ma wymagane uprawnienia. W przeciwnym razie następujące 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 Przyznawanie dostępu .

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

  4. Skonfiguruj indeksy w swoim nowym projekcie. Indeksy złożone powinny pasować do projektu źródłowego i docelowego. Aby uniknąć konieczności wielokrotnego przetwarzania każdego dokumentu, należy najpierw skonfigurować indeksy.

Eksportuj dane z projektu źródłowego

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

Utwórz zasobnik Cloud Storage

Utwórz wiadro Cloud Storage w tej samej lokalizacji, w której znajduje się baza danych Cloud Firestore. Aby wyświetlić lokalizację bazy danych, zobacz ustawienie lokalizacji projektu . Nie możesz używać segmentu Requester Pays do operacji eksportu i importu.

Jeśli Twojego zasobnika Cloud Storage nie ma 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 wykorzystują to domyślne konto usługi do autoryzacji operacji segmentu Cloud Storage. Aby przyznać domyślnemu kontu usługi dostęp do zasobnika źródłowego, przyznaj mu rolę Storage Admin .

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

Uruchom Cloud Shell

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

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

Wyłącz operacje zapisu (opcjonalnie)

Jeśli aplikacja będzie nadal zapisywać w bazie danych podczas wykonywania operacji eksportu, możesz nie przechwycić wszystkich tych zapisów w plikach eksportu. Aby wyeksportować dane ze spójnego stanu, wyłącz zapis w bazie danych, aktualizując reguły bezpieczeństwa i zatrzymując wszelkie operacje Admin SDK.

  1. Zaktualizuj zasady bezpieczeństwa

    Na karcie Reguły Cloud Firestore w konsoli zaktualizuj reguły bezpieczeństwa projektu źródłowego, aby blokować wszelkie zapisy. Na 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. Halt zapisuje z pakietów Admin SDK

    Reguły bezpieczeństwa nie powstrzymują zapisów pochodzących z uprzywilejowanych środowisk serwerowych utworzonych przy użyciu pakietu Firebase Admin SDK lub biblioteki klienta Google Cloud Server . Pamiętaj, aby zatrzymać operacje zapisu na serwerach administracyjnych, wyłączając lub aktualizując serwery.

Rozpocznij operację eksportu

Użyj polecenia gcloud firestore export aby wyeksportować dane z projektu źródłowego. Możesz wyeksportować wszystkie swoje dane lub tylko wybrane zbiory. Zastąp [SOURCE_BUCKET] nazwą swojego segmentu Cloud Storage:

Eksportuj wszystkie dane
gcloud firestore export gs://[SOURCE_BUCKET] --async
Eksportuj określone kolekcje
gcloud firestore export gs://[SOURCE_BUCKET] --collection-ids=[COLLECTION_ID_1],[COLLECTION_ID_2] --async

Zanotuj outputURIPrefix operacji eksportu, ponieważ będziesz go później używać. Domyślnie Cloud Firestore dodaje prefiks do plików eksportu na podstawie sygnatury czasowej:

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

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

gcloud firestore operations list

Zaimportuj dane do projektu docelowego

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

Daj projektowi docelowemu dostęp do plików danych

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

Przenieś pliki danych do lokalnego zasobnika

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 sekcji Przenoszenie i zmienianie nazw zasobników . We wszystkich poniższych krokach użyj tego nowego zasobnika jako [SOURCE_BUCKET] .

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

Jeśli zasobnika źródłowego nie ma w projekcie docelowym, musisz przyznać domyślnemu kontu usługi projektu docelowego dostęp do zasobnika źródłowego. Domyślne konto usługi nosi 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 dostępu do zasobnika.

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

Uruchom Cloud Shell

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

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

Rozpocznij operację importowania

Przed rozpoczęciem operacji importowania upewnij się, że gcloud jest skonfigurowany dla prawidłowego 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

Gdzie [EXPORT_PREFIX] odpowiada prefiksowi w pliku outputUriPrefix operacji eksportu. Na przykład:

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

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

gcloud firestore operations list