Connetti la tua app all'emulatore Cloud Functions

Prima di connettere la tua app all'emulatore Cloud Functions, assicurati di comprendere il flusso di lavoro generale di Firebase Local Emulator Suite e di installare e configurare Local Emulator Suite ed esaminare i relativi comandi CLI .

Scegli un progetto Firebase

La Firebase Local Emulator Suite emula i prodotti per un singolo progetto Firebase.

Per selezionare il progetto da utilizzare, prima di avviare gli emulatori, nella CLI eseguire firebase use nella directory di lavoro. In alternativa, puoi passare il flag --project a ciascun comando dell'emulatore.

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

Tipo di progetto Caratteristiche Utilizzare con emulatori
Vero

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

I progetti reali hanno risorse attive, come istanze di database, bucket di archiviazione, funzioni o qualsiasi altra risorsa configurata per quel progetto Firebase.

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

Per tutti i prodotti che non stai emulando, le tue app e il tuo codice interagiranno con la risorsa live (istanza del database, bucket di archiviazione, funzione e così via).

Dimostrazione

Un progetto Firebase demo non ha una configurazione Firebase reale né risorse live. Di solito si accede a questi progetti tramite codelab o altri tutorial.

Gli ID progetto per i progetti demo hanno il prefisso demo- .

Quando lavori con progetti Firebase demo, le tue app e il tuo codice interagiscono solo con gli emulatori. Se la tua app tenta di interagire con una risorsa per la quale non è in esecuzione un emulatore, il codice avrà esito negativo.

Ti consigliamo di utilizzare progetti demo ove possibile. I vantaggi includono:

  • Configurazione più semplice, poiché puoi eseguire gli emulatori senza mai creare un progetto Firebase
  • Maggiore sicurezza, poiché se il codice richiama accidentalmente risorse (di produzione) non emulate, non vi è alcuna possibilità di modifica, utilizzo e fatturazione dei dati
  • Migliore supporto offline, poiché non è necessario accedere a Internet per scaricare la configurazione dell'SDK.

Strumenti la tua app per comunicare con gli emulatori

Dota la tua app di funzioni richiamabili

Se il tuo prototipo e le tue attività di test coinvolgono funzioni backend richiamabili , configura l'interazione con l'emulatore Cloud Functions for Firebase in questo 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);
Veloce
Functions.functions().useFunctionsEmulator(origin: "http://127.0.0.1:5001")

Web modular API

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

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

Web namespaced API

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

Strumenta la tua app per l'emulazione delle funzioni HTTPS

Ogni funzione HTTPS nel tuo codice verrà servita dall'emulatore locale utilizzando il seguente formato URL:

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

Ad esempio, una semplice funzione helloWorld con la porta host e la regione predefinite verrebbe servita in:

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

Gestisci la tua app per l'emulazione di funzioni attivate in background

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

  • Emulatore di database in tempo reale
  • Emulatore Cloud Firestore
  • Emulatore di autenticazione
  • Emulatore Pub/Sub

Per attivare eventi in background, modifica le risorse back-end utilizzando l'interfaccia utente di Emulator Suite oppure collegando la tua app o testando il codice agli emulatori utilizzando l'SDK per la tua piattaforma.

Testare i gestori degli eventi personalizzati emessi dalle estensioni

Per le funzioni implementate per gestire gli eventi personalizzati di Firebase Extensions con Cloud Functions v2, l'emulatore Cloud Functions si accoppia con l'emulatore Eventarc per supportare i trigger Eventarc .

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

Il runtime Cloud Functions imposta la variabile di ambiente EVENTARC_EMULATOR su localhost:9299 nel processo corrente se l'emulatore Eventarc è in esecuzione. Gli SDK di amministrazione di Firebase si connettono automaticamente all'emulatore Eventarc quando è impostata la variabile di ambiente EVENTARC_EMULATOR . È possibile modificare la porta predefinita come discusso in Configura Local Emulator Suite .

Quando le variabili di ambiente sono configurate correttamente, Firebase Admin SDK invia automaticamente gli eventi all'emulatore Eventarc. A sua volta, l'emulatore Eventarc effettua una chiamata all'emulatore Cloud Functions per attivare eventuali gestori registrati.

Puoi controllare i log delle funzioni nell'interfaccia utente di Emulator Suite per i dettagli sull'esecuzione del gestore.

Configurare un ambiente di test locale

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

Quando utilizzi un emulatore Cloud Functions locale, puoi sovrascrivere le variabili di ambiente per il tuo progetto configurando un file .env.local . Il contenuto di .env.local ha 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 il test locale:

.env .env.dev .env.local
PIANETA=Terra

PUBBLICO=Umani

PUBBLICO=Dev Umani PUBBLICO=Umani locali

Quando avviato nel contesto locale, l'emulatore carica le variabili di ambiente come mostrato:

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

Segreti e credenziali nell'emulatore Cloud Functions

L'emulatore Cloud Functions supporta l'uso di segreti per archiviare e accedere a informazioni di configurazione riservate . Per impostazione predefinita, l'emulatore tenterà di accedere ai segreti di produzione utilizzando le credenziali predefinite dell'applicazione . In alcune situazioni come gli ambienti CI, l'emulatore potrebbe non riuscire ad accedere ai valori segreti a causa delle restrizioni sulle autorizzazioni.

Analogamente al supporto dell'emulatore Cloud Functions per le variabili di ambiente, puoi sovrascrivere i valori dei segreti configurando un file .secret.local . Ciò semplifica il test delle funzioni localmente, soprattutto se non hai accesso al valore segreto.

Quali altri strumenti esistono per testare Cloud Functions?

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

  • La shell Cloud Functions, che consente la prototipazione e lo sviluppo di funzioni interattive e iterative. La shell utilizza l'emulatore Cloud Functions con un'interfaccia in stile REPL per lo sviluppo. Non è prevista alcuna integrazione con gli emulatori Cloud Firestore o Realtime Database. Utilizzando la shell, puoi simulare dati ed eseguire chiamate di funzioni per simulare l'interazione con prodotti che Local Emulator Suite attualmente non supporta: Analytics, Remote Config e Crashlytics.
  • Firebase Test SDK per Cloud Functions, un Node.js con framework mocha per lo sviluppo di 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 nella pagina Test delle funzioni in modo interattivo e Test unitario di Cloud Functions .

Differenze tra l'emulatore Cloud Functions e la produzione

L'emulatore Cloud Functions è abbastanza vicino all'ambiente di produzione per la maggior parte dei casi d'uso. Abbiamo lavorato molto per garantire che tutto all'interno del runtime di Node sia il più vicino possibile alla produzione. Tuttavia, l'emulatore non imita l'intero ambiente di produzione containerizzato, quindi mentre il codice della funzione verrà eseguito in modo realistico, altri aspetti dell'ambiente (ad esempio file locali, comportamento dopo l'arresto anomalo delle funzioni, ecc.) saranno diversi.

Cloud IAM

Firebase Emulator Suite non tenta di replicare o rispettare alcun comportamento correlato a IAM durante l'esecuzione. Gli emulatori aderiscono alle regole di sicurezza Firebase fornite, ma nelle situazioni in cui verrebbe normalmente utilizzato IAM, ad esempio per impostare Cloud Functions che richiamano l'account del servizio e quindi le autorizzazioni, l'emulatore non è configurabile e utilizzerà l'account disponibile a livello globale sul computer dello sviluppatore, simile all'esecuzione diretta di uno script locale.

Limitazioni di memoria e processore

L'emulatore non impone restrizioni sulla memoria o sul processore per le tue funzioni. Tuttavia, l'emulatore supporta le funzioni di timeout tramite l'argomento di runtime timeoutSeconds .

Tieni presente che il tempo di esecuzione della funzione può differire dalla produzione quando le funzioni vengono eseguite nell'emulatore. Ti consigliamo, dopo aver progettato e testato le funzioni con l'emulatore, di eseguire test limitati in produzione per confermare i tempi di esecuzione.

Pianificazione delle differenze negli ambienti locali e produttivi

Poiché l'emulatore viene eseguito sul computer locale, dipende dall'ambiente locale per le applicazioni, i programmi e le utilità integrati.

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

  • Le applicazioni installate localmente per simulare l'ambiente di produzione (ad esempio ImageMagick di questo tutorial ) potrebbero differire nel comportamento dalla produzione, soprattutto se sono necessarie versioni diverse o si sviluppano in un ambiente non Linux. Prendi in considerazione la possibilità di distribuire la tua copia binaria del programma mancante insieme alla distribuzione della funzione.

  • Allo stesso modo, le utilità integrate (ad esempio, comandi shell come ls , mkdir ) possono differire dalle versioni disponibili in produzione, soprattutto se stai sviluppando in un ambiente non Linux (ad esempio, macOS). Puoi gestire questo problema utilizzando alternative solo nodo ai comandi nativi o creando file binari Linux da integrare nella tua distribuzione.

Nuovo tentativo

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

E dopo?