Migracja rozszerzeń w Firebase do samodzielnie utworzonego zestawu funkcji

Wybierz ścieżkę migracji: Przejście na pakiety funkcji w npm Przejście na samodzielnie utworzony pakiet funkcji

Jeśli wydawca nie utworzył oficjalnego zestawu zastępczego rozpowszechnianego w npm, ten przewodnik przeprowadzi Cię przez proces rozwidlenia rozszerzenia i skonfigurowania go jako lokalnego zestawu funkcji.

Sprawdzanie znanych ograniczeń migracji

Zanim zaczniesz migrację instancji rozszerzenia, sprawdź, czy Twoja konfiguracja korzysta z którejkolwiek z tych funkcji, które wymagają obejścia lub nie są jeszcze obsługiwane w zestawach funkcji:

  • Niestandardowe repozytoria Dockera i klucze KMS wymagają ręcznego obejścia Cloud Functions for Firebase nie obsługuje zastępczych parametrów systemowych do konfigurowania niestandardowego repozytorium Dockera ani klucza szyfrowania zarządzanego przez klienta (klucza KMS). Jeśli rozszerzenie konfiguruje którykolwiek z tych parametrów, zapoznaj się z obejściem problemu opisanym w najczęstszych pytaniach.

Zanim zaczniesz

Musisz skonfigurować interfejs wiersza poleceń Firebase i zainicjować projekt Firebase. Jeśli używasz interfejsu wiersza poleceń, upewnij się, że używasz wersji firebase-tools >= 15.32.0, która zawiera nowe polecenia migracji i zestawu funkcji.

Wymagane uprawnienia i role na koncie

W zależności od tego, co musi zostać utworzone i skonfigurowane przez interfejs wiersza poleceń Firebase podczas migracji, konto, którego używasz do uwierzytelniania w Firebase i Google Cloud, musi mieć te role:

  • roles/firebaseextensions.editor
  • roles/cloudbuild.builds.editor
  • roles/artifactregistry.writer
  • roles/run.developer
  • roles/iam.serviceAccountUser
  • roles/iam.serviceAccountCreator
  • roles/cloudfunctions.admin (jeśli musisz wykonać setIamPermissions w przypadku publicznych punktów końcowych)
  • roles/secretmanager.admin (jeśli używasz obiektów tajnych)
  • roles/serviceusage.serviceUsageAdmin (jeśli musisz włączyć nowe interfejsy API)

Zalecamy użycie konta, na którym wcześniej zainstalowano rozszerzenia i wdrożono funkcje, ponieważ większość tych uprawnień została już przyznana. Jeśli Twoje konto, które chcesz przenieść, potrzebuje więcej ról, postępuj zgodnie z Google Cloudinstrukcjami dotyczącymi uprawnień, aby je dodać.

Uaktualnianie instancji rozszerzenia do najnowszej wersji

Musisz zaktualizować rozszerzenie do najnowszej wersji, aby zminimalizować różnicę między instancją rozszerzenia a zestawem zastępczym. Jeśli nie uaktualnisz rozszerzenia, mogą wystąpić znaczne zmiany powodujące niezgodność między instancją rozszerzenia a jego zamiennikiem. Wyeksportowana konfiguracja może nie odpowiadać oczekiwaniom zestawu ze względu na zmiany parametrów w różnych wersjach.

Użyj jednej z tych opcji, aby zaktualizować rozszerzenie, w zależności od tego, gdzie zostało zainstalowane:

  • W konsoli Firebase
  • Z interfejsu wiersza poleceń Firebase za pomocą:
    • firebase ext:update <extension-instance-id> --project <project-id> firebase deploy --only extensions --project <project-id>

Jeśli pominiesz ten krok, interfejs wiersza poleceń poprosi Cię o uaktualnienie podczas eksportowania konfiguracji, jeśli rozszerzenie nie jest w najnowszej wersji.

Rozwidlenie rozszerzenia do lokalnego zestawu funkcji

Zanim zaczniesz konwertować rozszerzenie na lokalny zestaw funkcji, upewnij się, że kod źródłowy rozszerzenia znajduje się w projekcie Firebase. Aby to zrobić, sklonuj repozytorium rozszerzenia z GitHuba, utwórz katalog w katalogu głównym projektu Firebase i skopiuj do niego folder functions/ oraz plik extension.yaml rozszerzenia:

mkdir -p path/to/kit
cp -r /path/to/extension-source/functions/* path/to/kit/
cp /path/to/extension-source/extension.yaml path/to/kit/.

Wykonaj kroki od 1 do 8 z przewodnika po migracji dla wydawców, aby przenieść kod źródłowy rozszerzenia do funkcji 2 generacji. Następnie wykonaj te czynności.

Dodanie obsługi regionu wyeksportowanej funkcji i parametrów zaawansowanych do lokalnego zestawu

W lokalnym zestawie funkcji interfejs wiersza poleceń Firebase nie generuje pliku index.ts, aby skonfigurować pakiet i używać przeniesionych parametrów systemowych. Aby używać regionu funkcji i parametrów zaawansowanych skonfigurowanych dla rozszerzenia, skonfiguruj plik index.ts tak, aby odczytywał format wyeksportowany przez firebase ext:export --mode functions do pliku zmiennych środowiskowych.

W pliku index.ts najwyższego poziomu, który eksportuje funkcje, zdefiniuj parametr dla FUNCTION_DEFAULT_REGION i wywołaj setGlobalOptions ze zmiennymi środowiskowymi w formacie EXT_MIGRATED_SYSTEM_<GLOBAL_OPTION>, podobnie jak w szablonie index-kit-migration.ts używanym przez interfejs wiersza poleceń:

import { setGlobalOptions } from "firebase-functions";
import { MemoryOption, VpcEgressSetting, IngressSetting } from "firebase-functions/v2/options";
import { defineString } from "firebase-functions/params";

export const regionParam = defineString("FUNCTION_DEFAULT_REGION", {
  input: { text: { nonEmpty: true } },
  description: "Global default region where functions should be deployed. Can be overridden per-function.",
});

setGlobalOptions({
  region: regionParam,
  memory: (process.env.EXT_MIGRATED_SYSTEM_MEMORY as MemoryOption) ?? undefined,
  timeoutSeconds: process.env.EXT_MIGRATED_SYSTEM_TIMEOUTSECONDS
    ? Number(process.env.EXT_MIGRATED_SYSTEM_TIMEOUTSECONDS)
    : undefined,
  vpcConnectorEgressSettings:
    process.env.EXT_MIGRATED_SYSTEM_VPCCONNECTOREGRESSSETTINGS &&
    process.env.EXT_MIGRATED_SYSTEM_VPCCONNECTOREGRESSSETTINGS !== "VPC_CONNECTOR_EGRESS_SETTINGS_UNSPECIFIED"
      ? (process.env.EXT_MIGRATED_SYSTEM_VPCCONNECTOREGRESSSETTINGS as VpcEgressSetting)
      : undefined,
  vpcConnector: process.env.EXT_MIGRATED_SYSTEM_VPCCONNECTOR ?? undefined,
  maxInstances: process.env.EXT_MIGRATED_SYSTEM_MAXINSTANCES
    ? Number(process.env.EXT_MIGRATED_SYSTEM_MAXINSTANCES)
    : undefined,
  minInstances: process.env.EXT_MIGRATED_SYSTEM_MININSTANCES
    ? Number(process.env.EXT_MIGRATED_SYSTEM_MININSTANCES)
    : undefined,
  ingressSettings: (process.env.EXT_MIGRATED_SYSTEM_INGRESSSETTINGS as IngressSetting) ?? undefined,
  // Parses a comma-separated string of key:value pairs into a key-value object
  // (for example, "key1:value1,key2:value2" -> { key1: "value1", key2: "value2" }).
  labels: process.env.EXT_MIGRATED_SYSTEM_LABELS
    ? process.env.EXT_MIGRATED_SYSTEM_LABELS.split(",").reduce<Record<string, string> | undefined>(
        (acc, curr) => {
          const [key, value] = curr.split(":");
          const trimmedKey = key?.trim();
          const trimmedValue = value?.trim();
          if (!trimmedKey || !trimmedValue) {
            return acc;
          }
          acc = acc ?? {};
          acc[trimmedKey] = trimmedValue;
          return acc;
        },
        undefined,
      )
    : undefined,
});

// Re-export all functions so the Firebase CLI can deploy them
export * from "./your-functions";

Przetestowanie zestawu przed migracją

Masz teraz lokalny zestaw funkcji, który po wdrożeniu działa tak samo jak nowa instalacja rozszerzenia. Następnym krokiem jest sprawdzenie i rozwiązanie wszelkich problemów, które mogły się pojawić, zanim przeniesiesz do niego instancje rozszerzeń produkcyjnych.

Najpierw dodaj rozwidlenie jako lokalny zestaw, skonfiguruj go i wdróż w projekcie testowym. Lokalne pakiety funkcji muszą znajdować się w projekcie Firebase, więc jeśli sklonowane repozytorium rozszerzeń znajduje się poza projektem Firebase, przenieś je do katalogu projektu. Następnie uruchom to polecenie instalacji zestawu, aby zainstalować go jako zestaw lokalny:

firebase functions:kits:install --directory <path-to-your-fork> --project <test-project-id>

To polecenie pomoże Ci wybrać identyfikator zestawu, identyfikator instancji i konfigurację pierwszej instancji testowej. Następnie modyfikuje plik firebase.json, aby zarejestrować lokalny zestaw wskazujący na rozwidlony katalog, z konfiguracjami dla każdej instancji przechowywanymi w pliku .env w function-kits/<kit-id>/config-<instance-id>.

Wdróż lokalny zestaw w projekcie testowym z odpowiednimi zasobami, aby przetestować jego działanie. Jeśli masz już skonfigurowany projekt testowy do testowania rozszerzenia, uruchom to polecenie:

firebase deploy --only functions:<kit-instance-id> --project <test-project-id>

Przykładowe rozwiązanie: strumień Cloud Firestore do BigQuery (firestore-bigquery-export)

Sprawdź synchronizację między Cloud Firestore a BigQuery:

  1. Jeśli kolekcja ustawiona jako COLLECTION_PATH (users) nie istnieje, utwórz ją na stronie Cloud Firestore w konsoli Firebase.
  2. Utwórz dokument o nazwie bigquery-mirror-test zawierający dowolne pola z dowolnymi wartościami.
  3. W konsoli Google Cloud na stronie BigQuery wykonaj zapytanie na tabeli nieprzetworzonego dziennika zmian. Powinien zawierać jeden wiersz rejestrujący utworzenie dokumentu:

    SELECT * FROM `PROJECT_ID.analytics.users_raw_changelog`
    
  4. Wyślij zapytanie do najnowszego widoku, które powinno zwrócić najnowsze zdarzenie zmiany dla jedynego obecnego dokumentu (bigquery-mirror-test):

    SELECT * FROM `PROJECT_ID.analytics.users_raw_latest`
    
  5. Usuń dokument bigquery-mirror-test w: Cloud Firestore. Zniknie z widoku najnowszych zmian, a do tabeli nieprzetworzonego dziennika zmian zostanie dodane zdarzenie DELETE.

    Pełną historię pojedynczego dokumentu możesz sprawdzić za pomocą:

    SELECT *
       FROM `PROJECT_ID.analytics.users_raw_changelog`
       WHERE document_name = "bigquery-mirror-test"
       ORDER BY timestamp ASC
    

Różnice w porównaniu z testowaniem rozszerzenia:

  • Reguła jest wdrażana jako kit-<kit-instance-id>-fsexportbigquery, a nie ext-<instanceId>-fsexportbigquery. Poszukaj tej nazwy w panelu i logach Cloud Functions.
  • Twój kod działa w Firebase Local Emulator Suite jako funkcje standardowe. Wartości parametrów, które mają być używane w emulatorze, możesz ustawić za pomocą .env.local. Możesz też przeprowadzić test jednostkowy kodu za pomocą pakietu SDK firebase-functions-test, jak opisano w artykule Testy jednostkowe Cloud Functions.
  • Udostępnianie nie jest już obsługiwane przez środowisko wykonawcze rozszerzeń. Jeśli po wdrożeniu brakuje tabeli dziennika zmian, uruchom ponownie zadanie konfiguracji ręcznie: firebase functions:lifecycle:run afterFirstDeploy <kit-instance-id>. Zadanie jest idempotentne, więc jego ponowne uruchomienie uzgadnia zbiór danych, tabelę i widoki.
  • Wartości parametrów pochodzą z .env, a nie z formularza instalacji, więc ponowne uruchomienia firebase deploy nie są interaktywne po zakończeniu .env.

(Opcjonalnie) Czyszczenie po testach

Jeśli po zakończeniu testów chcesz usunąć tę instancję testową, odinstaluj ją:

firebase functions:kits:uninstall --instance <kit-instance-id> --project <test-project-id>

Spowoduje to usunięcie wszystkich zasobów w chmurze utworzonych podczas wdrażania zestawu oraz konfiguracji jego instancji. Jeśli masz tylko 1 egzemplarz zestawu, spowoduje to też usunięcie wpisu o zestawie z aplikacji firebase.json. Nie spowoduje to usunięcia lokalnego katalogu z kodem źródłowym. Podczas instalowania zestawu do migracji produkcyjnej możesz ponownie wybrać identyfikator zestawu.

Migracja z rozszerzeń do lokalnego zestawu

Po przetestowaniu lokalnego zestawu możesz przenieść wdrożoną instancję rozszerzenia.

1. Instalowanie instancji zestawu funkcji zamiennych

Zainstaluj lokalny zestaw funkcji, przekazując --no-configure, aby pominąć ręczną konfigurację, dzięki czemu w następnym kroku będzie można wyeksportować istniejącą konfigurację rozszerzenia bezpośrednio do tej instancji zestawu:

firebase functions:kits:install --no-configure --directory <path-to-your-fork> --project <project-id>

2. Skonfiguruj instancję zestawu funkcji tak samo jak rozszerzenie.

Musisz dostosować tę instancję zestawu, używając konfiguracji identycznej z konfiguracją zastępowanego rozszerzenia. Możesz wyeksportować konfigurację instancji rozszerzenia do pliku .env, który przechowuje dane konfiguracji parametrów, zmiennych środowiskowych i tajnych odwołań dla wszystkich Cloud Functions, w tym zestawów. Aby wyeksportować go bezpośrednio do pliku konfiguracji zestawu, uruchom:

firebase ext:export --mode functions --instance <extension-instance-id> --kit-instance <kit-instance-id> --project <project-id>

Po wykonaniu tego kroku informacje o konfiguracji tej instancji zostaną zapisane w pliku .env powiązanym z projektem w katalogu konfiguracji instancji, na przykład: function-kits/<kit-name>/config-<instance-id>/.env.<project-id>

3. Wdrażanie i weryfikowanie wymiany zestawu

Teraz, gdy zestaw jest zainstalowany i dostępny jako zestaw funkcji, możesz wdrożyć jego zamiennik. Zestawy funkcji działają jak standardowe funkcje, przy czym każda instancja zestawu działa jako osobna baza kodu do porządkowania funkcji. Możesz wdrożyć wszystkie funkcje lub tylko konkretną instancję zestawu. Podczas migracji pojedynczej instancji rozszerzenia wdrażaj tylko tę instancję zestawu.

Jeśli Twój zestaw korzysta z nowych parametrów, które nie były obecne w instancji rozszerzenia, z której została przeprowadzona migracja, interfejs wiersza poleceń Firebase poprosi o nie na początku procesu wdrażania. W tym przykładzie nie jest to oczekiwane, ponieważ używamy aktualnego rozszerzenia firestore-bigquery-export, ale wiele zestawów prosi o podanie nowego parametru dla każdego źródła aktywatora zdarzenia używanego przez zestaw. W ramach tej migracji zaktualizowane zestawy używają funkcji 2 generacji, podczas gdy rozszerzenia wcześniej używały funkcji 1 generacji. W drugiej generacji funkcje znajdują się w pobliżu źródeł zdarzeń i są dodawane jako dodatkowy parametr. Jeśli w przyszłych aktualizacjach zostaną dodane nowe parametry, interfejs wiersza poleceń wyświetli odpowiedni komunikat przy następnym wdrożeniu.

Przykład:

firebase deploy --only functions:firestore-bigquery-export --project my-project

Dane wyjściowe:

=== Deploying to 'my-project'...
i  deploying functions
i  functions: Loaded environment variables from function-kits/firestore-bigquery-export/config-firestore-bigquery-export/.env.my-project
i  functions: ensuring required API bigquery.googleapis.com is enabled...
i  functions: ensuring required API cloudtasks.googleapis.com is enabled...
✔  functions: required APIs are enabled
i  functions: granting declarative IAM roles to managed service account:
   - BigQuery Data Editor
   - BigQuery User
   - Cloud Datastore User
   - Eventarc Event Receiver
   - roles/run.invoker
✔  functions: successfully granted IAM roles
i  functions: creating Node.js 22 (2nd Gen) function kit-firestore-bigquery-export-fsexportbigquery(us-central1)...
i  functions: creating Node.js 22 (2nd Gen) function kit-firestore-bigquery-export-initBigQuerySync(us-central1)...
i  functions: creating Node.js 22 (2nd Gen) function kit-firestore-bigquery-export-setupBigQuerySync(us-central1)...
✔  functions[kit-firestore-bigquery-export-fsexportbigquery(us-central1)] Successful create operation.
✔  functions[kit-firestore-bigquery-export-initBigQuerySync(us-central1)] Successful create operation.
✔  functions[kit-firestore-bigquery-export-setupBigQuerySync(us-central1)] Successful create operation.
i  functions: Executing afterFirstDeploy lifecycle hook targeting: kit-firestore-bigquery-export-initBigQuerySync...
✔  functions: Successfully queued task for lifecycle hook kit-firestore-bigquery-export-initBigQuerySync in queue projects/my-project/locations/us-central1/queues/kit-firestore-bigquery-export-initBigQuerySync.
✔  Deploy complete!

Aby sprawdzić, czy podczas firebase deploy zestawu nie wystąpiły błędy, sprawdź logi wdrażania i zobacz, czy zostały aktywowane jakieś punkty zaczepienia cyklu życia. Popularne rozszerzenia, takie jak Stream Cloud Firestore to BigQuery, używają punktów zaczepienia cyklu życia. Oto przykład działania wywołanego punktu zaczepienia cyklu życia:

i  functions: Executing afterFirstDeploy lifecycle hook targeting: kit-firestore-bigquery-export-initBigQuerySync...
✔  functions: Successfully queued task for lifecycle hook kit-firestore-bigquery-export-initBigQuerySync in queue projects/my-project/locations/europe-west1/queues/kit-firestore-bigquery-export-initBigQuerySync.
i  functions: View logs for afterFirstDeploy at: https://console.cloud.google.com/logs/query;query=resource.type%3D%22cloud_run_revision%22%0Aresource.labels.service_name%3D%22kit-firestore-bigquery-export--initbigquerysync%22%0Aresource.labels.location%3D%22europe-west1%22;project=my-project

Te komunikaty logu potwierdzają, że:

  • Znaleziono i wykonano punkt zaczepienia cyklu życia.
  • Zadanie zostało dodane do kolejki zadań powiązanej z punktem zaczepienia cyklu życia.
  • Podany został link do Cloud Logging, dzięki któremu możesz sprawdzić, czy zadanie zostało wykonane bez błędów.

Kliknij link do logów, aby przejść do konsoli Google Cloud i sprawdzić, czy w logach nie ma błędów, a zdarzenie kolejki zadań zostało przetworzone. Jeśli zdarzenie cyklu życia nie zostało wykonane, możesz je ponownie wywołać, uruchamiając:

firebase functions:lifecycle:run <hook-name> <codebase>

Jeśli wdrażasz instancję zestawu funkcji po raz pierwszy, uruchom:

firebase functions:lifecycle:run afterFirstDeploy <kit-instance-id>

Jeśli w dowolnym momencie podczas weryfikacji zdecydujesz, że chcesz zatrzymać lub cofnąć tę migrację, możesz odinstalować zestaw, postępując zgodnie z instrukcjami w sekcji Odinstalowywanie rozszerzenia.

Po sprawdzeniu, że początkowe wdrożenie zestawu funkcji zostało zakończone, musisz sprawdzić, czy funkcje zestawu działają zgodnie z oczekiwaniami. Ponieważ rozszerzenie nadal działa, musisz uważać, aby nie sprawdzać tylko tego, czy jedno z tych 2 rozwiązań zadziałało, ponieważ rozszerzenie działało i będzie działać nadal.

Jeśli przetwarzanie nie uległo zmianie i nie widzisz zduplikowanych wyników z rozszerzenia i zestawu, najlepiej jest bezpośrednio sprawdzić logi zestawu po uruchomieniu jego funkcji.

Przykładowe rozwiązanie: strumieniowe przesyłanie danych z Cloud Firestore do BigQuery

W przypadku rozszerzenia Stream Cloud Firestore to BigQuery zapisy zarówno w tabeli nieprzetworzonego dziennika zmian (*_raw_changelog), jak i w tabeli najnowszego widoku (*_raw_latest) będą deduplikowane, jeśli to samo zdarzenie zostanie dostarczone do zestawu i rozszerzenia. Nie możesz więc użyć obecności żadnych wierszy ani zduplikowanych wierszy w BigQuery, aby sprawdzić, czy zestaw działa.

Możesz wyświetlić logi funkcji wkrótce po zapisaniu danych w kolekcji Firestore za pomocą firebase functions:logs i poszukać wpisu logu, który wskazuje, że zapis został pomyślnie przetworzony. W przypadku tego zestawu z domyślnym identyfikatorem instancji firestore-bigquery-export będzie to wyglądać tak:

2026-09-25T19:52:46.328612Z I kit-firestore-bigquery-export-fsexportbigquery: Started execution of extension
2026-09-25T19:52:46.328644Z I kit-firestore-bigquery-export-fsexportbigquery: {"message":"Firestore event received by onDocumentWritten trigger","document_name":"projects/extensions-eventarc-testing/databases/(default)/documents/exported-messages/cmGP6XLyksqGdw2OgTOq","operation":0,"event_id":"9f59a2a4-1a5e-4c41-a32d-561e3c734502"}
2026-09-25T19:52:46.616064Z I kit-firestore-bigquery-export-fsexportbigquery: Completed execution of extension
2026-09-2

Jeśli masz dużo logów, możesz je przefiltrować, aby wyświetlić konkretną funkcję zestawu, używając tego polecenia:

firebase functions:log --only <function name>

Aby znaleźć konkretne nazwy funkcji dla instancji zestawu, możesz użyć tego polecenia:

firebase functions:list | grep kit-<kit instance id>

W tym przykładzie:

firebase functions:list | grep kit-firestore-bigquery-export
│ kit-firestore-bigquery-export-fsexportbigquery  │ v2      │ google.cloud.firestore.document.v1.written                    │
│ kit-firestore-bigquery-export-initBigQuerySync  │ v2      │ taskQueue                                                     │
│ kit-firestore-bigquery-export-setupBigQuerySync │ v2      │ taskQueue                                                     │
│ kit-firestore-bigquery-export-syncBigQuery      │ v2      │ taskQueue                                                     │

4. Odinstalowywanie rozszerzenia

Po zweryfikowaniu wdrożonego zestawu funkcji możesz odinstalować rozszerzenie, aby nie powielać jego działania w zestawie i rozszerzeniu. Możesz odinstalować wszystkie rozszerzenia z interfejsu wiersza poleceń Firebase niezależnie od tego, jak zostały zainstalowane, jeśli przekażesz flagę --immediate:

firebase ext:uninstall <extension-instance-id> --project <project-id> --immediate

Przykład:

firebase ext:uninstall firestore-bigquery-export --project my-project --immediate

Dane wyjściowe:

i  extensions: uninstalling firestore-bigquery-export...
i  extensions: deleting extension instance resources in project my-project...
✔  extensions: successfully uninstalled firestore-bigquery-export

Migracje zaawansowane

Możesz mieć rozszerzenia w wielu projektach Firebase, którymi chcesz zarządzać za pomocą jednej bazy kodu. Jeśli na przykład wdrażasz tę samą infrastrukturę w środowisku testing i production, z których każde ma instancję documents Cloud Firestore eksportowaną do BigQuery, możesz mieć zainstalowane 2 instancje rozszerzenia firestore-bigquery-export:

  • export-documents-testing
  • export-documents-production

Jeśli podczas pracy z interfejsem wiersza poleceń Firebase przeniesiesz te 2 instancje rozszerzenia do 2 instancji zestawu funkcji w jednej bazie kodu i wdrożysz je za pomocą poleceń firebase deploy --project testing i firebase deploy --project production, każde wdrożenie utworzy 2 instancje w środowiskach testing i production.

Zamiast tego zastąp 2 instancje rozszerzenia jedną instancją zestawu funkcji firestore-bigquery-export wdrożoną w kilku projektach, z których każdy ma własną konfigurację. Katalog konfiguracji instancji powinien wyglądać tak:

  • config-export-documents/
    • .env.testing
    • .env.production

Każde wdrożenie w testing i production tworzy jedną instancję zestawu z odpowiednią konfiguracją. Istniejące polecenia interfejsu wiersza poleceń tworzą tę konfigurację, o ile przy każdym wywołaniu polecenia ext:migrate lub functions:kits:install przekazujesz flagę --project.

Przykład:

firebase functions:kits:install --package @firebase-function-kits/firestore-bigquery-export --project testing --no-configure --template migration
✔ What would you like to name this kit? firestore-bigquery-export
✔ What would you like to name this instance? export-documents
✔  Wrote function-kits/firestore-bigquery-export/source/package.json
✔  Wrote function-kits/firestore-bigquery-export/source/tsconfig.json
✔  Wrote function-kits/firestore-bigquery-export/source/.gitignore
✔  Wrote function-kits/firestore-bigquery-export/source/src/index.ts
i  functions: Running npm install
✔  Wrote configuration info to firebase.json
✔  functions: Function kit firestore-bigquery-export successfully installed.
# This creates the export-documents instance with an empty .env.testing file
# for the testing project. Now populate it via export:
firebase ext:export --mode functions --instance export-documents-testing \
  --kit-instance export-documents --project testing

# Repeat the export for production into the same kit instance to create
# .env.production from the export-documents-prod instance:
firebase ext:export --mode functions --instance export-documents-prod \
  --kit-instance export-documents --project production

Masz teraz pojedynczą instancję zestawu skonfigurowaną do wdrażania w projektach testing i production z odpowiednimi konfiguracjami. Jeśli utworzysz instancję w projekcie testing i uruchomisz polecenie functions:kits:install dla tego samego pakietu w projekcie production, pojawi się opcja ponownego użycia instancji skonfigurowanej dla projektu testing lub zainstalowania drugiej instancji.