Collega la tua app all'emulatore Cloud Functions

Prima di connettere la tua app all'emulatore Cloud Functions, assicurati che: il flusso di lavoro Firebase Local Emulator Suite generale, e di installare e configurare Local Emulator Suite e rivedi i relativi comandi dell'interfaccia a riga di comando.

Scegli un progetto Firebase

L'elemento Firebase Local Emulator Suite emula i prodotti per un singolo progetto Firebase.

Per selezionare il progetto da utilizzare, prima di avviare gli emulatori, esegui firebase use nella directory di lavoro in CLI. In alternativa, puoi passare il flag --project per ogni emulatore .

Local Emulator Suite supporta l'emulazione di progetti Firebase reali e progetti demo.

Tipo di progetto Funzionalità Usa con emulatori
Reale

Un vero progetto Firebase è un progetto che hai creato e configurato (molto probabilmente tramite la console Firebase).

I progetti reali includono risorse in tempo reale, ad esempio istanze di database, bucket, funzioni o qualsiasi altra risorsa configurata per l'account Firebase progetto.

Quando lavori con progetti Firebase reali, puoi eseguire emulatori per qualsiasi o tutti i prodotti supportati.

Per i prodotti non emulati, le tue app e il tuo codice interagiscono con la risorsa live (istanza di database, bucket, funzione e così via).

Demo

Un progetto Firebase dimostrativo non ha una configurazione Firebase reale e nessuna risorsa attiva. In genere, si accede a questi progetti tramite codelab o altri tutorial.

Gli ID progetto dei progetti demo hanno il prefisso demo-.

Quando utilizzi progetti Firebase di prova, le tue app e il tuo codice interagiscono solo con gli emulatori. Se la tua app tenta di interagire con una risorsa per cui non è in esecuzione un emulatore, il codice restituirà un errore.

Ti consigliamo di utilizzare i progetti dimostrativi, se possibile. I vantaggi includono:

  • Configurazione più semplice, in quanto è possibile eseguire gli emulatori senza mai creare un Progetto Firebase
  • Maggiore sicurezza, poiché se il codice richiama accidentalmente la modalità non emulata di produzione, non c'è la possibilità che i dati vengano modificati, utilizzati e fatturati
  • Migliore supporto offline, in quanto non è necessario accedere a Internet per scarica la configurazione SDK.
di Gemini Advanced.

Imposta la tua app per comunicare con gli emulatori

Strumenti della tua app per le funzioni richiamabili

Se le attività di prototipo e test coinvolgono funzioni di backend richiamabili, configura l'interazione con l'emulatore Cloud Functions for Firebase nel seguente modo:

Kotlin+KTX
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
val functions = Firebase.functions
functions.useEmulator("10.0.2.2", 5001)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
FirebaseFunctions functions = FirebaseFunctions.getInstance();
functions.useEmulator("10.0.2.2", 5001);
Swift
Functions.functions().useFunctionsEmulator(origin: "http://127.0.0.1:5001")

Web

import { getApp } from "firebase/app";
import { getFunctions, connectFunctionsEmulator } from "firebase/functions";

const functions = getFunctions(getApp());
connectFunctionsEmulator(functions, "127.0.0.1", 5001);

Web

firebase.functions().useEmulator("127.0.0.1", 5001);

Strumenti della tua app per l'emulazione delle funzioni HTTPS

Ogni funzione HTTPS nel codice viene gestita dall'emulatore locale utilizzando il seguente formato URL:

http://$HOST:$PORT/$PROJECT/$REGION/$NAME

Ad esempio, una funzione helloWorld semplice con la porta e la regione dell'host predefinite verrebbe gestita all'indirizzo:

https://localhost:5001/$PROJECT/us-central1/helloWorld

Strumenti della tua app per l'emulazione delle funzioni delle code di attività

L'emulatore configura automaticamente le code di attività emulate in base al trigger e l'SDK Admin reindirizza le richieste in coda all'emulatore se rileva che è in esecuzione tramite l'ambiente CLOUD_TASKS_EMULATOR_HOST .

Tieni presente che il sistema di invio utilizzato in produzione è più complesso del una versione implementata nell'emulatore, quindi non dovresti aspettarti un comportamento personalizzato per il mirroring con precisione degli ambienti di produzione. I parametri all'interno di fornisce limiti superiori alla frequenza di invio delle attività e ho riprovato.

Strumenti della tua app per l'emulazione delle funzioni attivate in background

L'emulatore Cloud Functions supporta funzioni attivate in background dalle seguenti origini:

  • emulatore Realtime Database
  • emulatore Cloud Firestore
  • Emulatore Authentication
  • emulatore Pub/Sub
  • Emulatore di avvisi Firebase

Per attivare eventi in background, modifica le risorse di backend utilizzando Emulator Suite UI oppure connettendo la tua app o il tuo codice di test agli emulatori utilizzando l'SDK per la tua piattaforma.

Test dei gestori per gli eventi personalizzati emessi dalle estensioni

Per le funzioni che implementi per gestire gli eventi personalizzati Firebase Extensions con Cloud Functions versione 2, l'emulatore Cloud Functions si accoppia con l'emulatore Eventarc per supportare gli trigger Eventarc.

Per testare i gestori di eventi personalizzati per le estensioni che emettono eventi, devi installare gli emulatori Cloud Functions ed Eventarc.

Il runtime Cloud Functions imposta l'ambiente EVENTARC_EMULATOR su localhost:9299 nel processo attuale se l'emulatore Eventarc in esecuzione. Gli Firebase Admin SDK si connettono automaticamente a Eventarc quando è impostata la variabile di ambiente EVENTARC_EMULATOR. Puoi modificare la porta predefinita come descritto in Configura Local Emulator Suite.

Se le variabili di ambiente sono configurate correttamente, Firebase Admin SDK invia automaticamente gli eventi all'emulatore Eventarc. A sua volta, la classe Eventarc l'emulatore richiama l'emulatore Cloud Functions per attivare qualsiasi e gestori registrati.

Puoi controllare i log di Functions nel Emulator Suite UI per maggiori dettagli su dell'esecuzione di un gestore.

configura un ambiente di test locale

Se le tue funzioni si basano su dotenv configurazione dell'ambiente, puoi emulare questo comportamento nel tuo ambiente di test locale.

Quando utilizzi un emulatore Cloud Functions locale, puoi eseguire l'override delle variabili di ambiente per il tuo progetto configurando un file .env.local. I contenuti di .env.local hanno la precedenza su .env e sul file .env specifico del progetto.

Ad esempio, un progetto potrebbe includere questi tre file contenenti valori leggermente diversi per lo sviluppo e i test locali:

.env .env.dev .env.local
PLANET=Earth

AUDIENCE=Utenti

AUDIENCE=Dev Humans AUDIENCE=Persone locali

Quando viene avviato nel contesto locale, l'emulatore carica l'ambiente come mostrato:

  $ firebase emulators:start
  i  emulators: Starting emulators: functions
  # Starts emulator with following environment variables:
  #  PLANET=Earth
  #  AUDIENCE=Local Humans

Secret e credenziali nell'emulatore Cloud Functions

L'emulatore Cloud Functions supporta l'utilizzo di secret per archiviare e accedere a informazioni di configurazione sensibili. Per impostazione predefinita, l'emulatore tenterà di accedere ai secret di produzione utilizzando le credenziali predefinite dell'applicazione. In determinate situazioni come gli ambienti CI, l'emulatore potrebbe non riuscire ad accedere valori secret a causa di restrizioni di autorizzazione.

Analogamente al supporto dell'emulatore Cloud Functions per le variabili di ambiente, puoi eseguire l'override dei valori dei secret impostando un file .secret.local. Ciò rende è facile testare le funzioni localmente, soprattutto se non disponi dell'accesso al valore del secret.

Quali altri strumenti per testare Cloud Functions esistono?

L'emulatore Cloud Functions è integrato da altri prototipi e test strumenti:

  • La shell di Cloud Functions, che consente funzioni iterative interattive la prototipazione e lo sviluppo. La shell utilizza l'emulatore Cloud Functions un'interfaccia in stile REPL per lo sviluppo. Nessuna integrazione con Sono forniti emulatori Cloud Firestore o Realtime Database. Utilizzando la shell, puoi simulare i dati ed eseguire chiamate di funzione per simulare l'interazione con i prodotti che Local Emulator Suite non supporta al momento: Analytics, Remote Config e Crashlytics.
  • Firebase Test SDK per Cloud Functions, un Node.js con framework mocha per lo sviluppo delle funzioni. In effetti, l'SDK di test di Cloud Functions fornisce l'automazione sulla shell di Cloud Functions.

Puoi trovare ulteriori informazioni sulla shell di Cloud Functions e sull'SDK di test di Cloud Functions in Test delle funzioni in modo interattivo e Test delle unità di Cloud Functions.

Differenze tra l'emulatore Cloud Functions e la produzione

L'emulatore Cloud Functions è abbastanza vicino all'ambiente di produzione nella maggior parte dei casi d'uso. Abbiamo lavorato duramente per garantire che tutto all'interno del runtime di Node sia il più vicino possibile alla produzione. Tuttavia, un emulatore non imita l'ambiente di produzione containerizzato quindi mentre il codice della funzione verrà eseguito in modo realistico, altri aspetti della dell'ambiente (ad es. file locali, comportamento dopo l'arresto di una funzione e così via) differiscono.

Cloud IAM

Firebase Emulator Suite non tenta di replicare o rispettare alcun comportamento correlato all'IAM per l'esecuzione. Gli emulatori rispettano i requisiti di sicurezza di Firebase Sono state fornite regole, ma nelle situazioni in cui viene normalmente utilizzato IAM, ad esempio per impostare Cloud Functions richiamando l'account di servizio e quindi le autorizzazioni, l'emulatore non è configurabile e utilizzerà l'account disponibile a livello globale sul tuo computer di sviluppo, in modo simile all'esecuzione diretta di uno script locale.

Limitazioni di memoria e processore

L'emulatore non applica limitazioni di memoria o processore per il tuo funzioni. Tuttavia, l'emulatore supporta le funzioni di timeout tramite timeoutSeconds argomento di runtime.

Tieni presente che il tempo di esecuzione di una funzione può differire dalla produzione quando le funzioni sono nell'emulatore. Dopo aver progettato e testato la piattaforma, con l'emulatore, esegui test limitati in produzione per confermare tempi di esecuzione.

Pianificazione delle differenze tra gli ambienti locali e di produzione

Poiché l'emulatore viene eseguito sulla tua macchina locale, dipende per applicazioni e programmi e utilità integrati.

Tieni presente che il tuo ambiente locale per lo sviluppo di Cloud Functions potrebbe differiscono dall'ambiente di produzione di Google:

  • Le applicazioni installate in locale per simulare l'ambiente di produzione (ad es. ImageMagick in questo tutorial) potrebbe avere un comportamento diverso rispetto alla produzione, soprattutto se hai bisogno di un o lo sviluppo in un ambiente non Linux. Valuta la possibilità di eseguire il deployment copia binaria del programma mancante insieme al deployment della funzione.

  • Analogamente, le utilità integrate (ad esempio, comandi shell come ls, mkdir) possono rispetto alle versioni disponibili in produzione, soprattutto se stai sviluppando un ambiente non Linux (ad es. macOS). Puoi gestire questo problema utilizzando Alternative basate sui nodi ai comandi nativi o creazione di file binari Linux per in bundle con il tuo deployment.

Nuovo tentativo in corso…

L'emulatore Cloud Functions non supporta i nuovi tentativi in caso di errore.

Che cosa succede ora?