Connetti la tua app all'emulatore Cloud Functions

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

Scegli un progetto Firebase

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 propria directory di lavoro. Oppure 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 live, 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 di database, bucket di archiviazione, funzione e così via).

Demo

Un progetto Firebase demo non ha una configurazione Firebase reale e nessuna risorsa attiva. 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 dimostrativi Firebase, 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, tale 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 tuo 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.

Strumenta la tua app per parlare con gli emulatori

Strumenta la tua app per le funzioni richiamabili

Se le tue attività di prototipo e test prevedono funzioni di backend richiamabili , configura l'interazione con l'emulatore di Cloud Functions per 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);
Rapido
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 a:

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

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

L'emulatore di Cloud Functions supporta le 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 di back-end utilizzando l'interfaccia utente di Emulator Suite o collegando la tua app o il codice di test agli emulatori utilizzando l'SDK per la tua piattaforma.

Gestori di test per eventi personalizzati emessi dalle estensioni

Per le funzioni che implementi per gestire gli eventi personalizzati di Firebase Extensions con Cloud Functions v2, l'emulatore di Cloud Functions si accoppia con l'emulatore Eventarc per supportare i 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 di Cloud Functions imposta la variabile di ambiente EVENTARC_EMULATOR su localhost:9299 nel processo corrente se l'emulatore Eventarc è in esecuzione. Gli SDK Firebase Admin si connettono automaticamente all'emulatore Eventarc quando è impostata la variabile di ambiente EVENTARC_EMULATOR . È possibile modificare la porta predefinita come discusso in Configure 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 richiama l'emulatore Cloud Functions per attivare eventuali gestori registrati.

Puoi controllare i log di 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 basata su dotenv , puoi emulare tale comportamento nel tuo ambiente di test locale.

Quando utilizzi un emulatore locale di Cloud Functions, puoi eseguire l'override delle variabili di ambiente per il tuo progetto impostando 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 il test locale:

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

PUBBLICO=Umani

PUBBLICO=Sviluppatori Umani PUBBLICO=Umani locali

Quando viene 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 di Cloud Functions

L'emulatore di Cloud Functions supporta l'utilizzo di secret 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 di restrizioni di autorizzazione.

Analogamente al supporto dell'emulatore Cloud Functions per le variabili di ambiente, puoi eseguire l'override dei valori dei segreti impostando un file .secret.local . Ciò semplifica il test delle funzioni in locale, soprattutto se non si ha accesso al valore segreto.

Quali altri strumenti per testare Cloud Functions esistono?

L'emulatore di 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 viene fornita alcuna integrazione con gli emulatori Cloud Firestore o Realtime Database. Utilizzando la shell, prendi in giro i dati ed esegui chiamate di funzione per simulare l'interazione con i prodotti che la Local Emulator Suite non supporta attualmente: Analytics, Remote Config e Crashlytics.
  • Firebase Test SDK for Cloud Functions, un framework Node.js con 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 in Testare le funzioni in modo interattivo e Unit testing di Cloud Functions .

In che modo l'emulatore di Cloud Functions differisce dalla produzione

L'emulatore di 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 fosse il più vicino possibile alla produzione. Tuttavia, l'emulatore non imita l'intero ambiente di produzione containerizzato, quindi mentre il tuo codice funzione verrà eseguito in modo realistico, altri aspetti del tuo ambiente (ad esempio file locali, comportamento dopo arresti anomali delle funzioni, ecc.) saranno diversi.

Cloud IAM

Firebase Emulator Suite non tenta di replicare o rispettare alcun comportamento correlato a IAM per l'esecuzione. Gli emulatori aderiscono alle regole di sicurezza Firebase fornite, ma in situazioni in cui IAM verrebbe normalmente utilizzato, 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 sulla macchina dello sviluppatore, simile all'esecuzione diretta di uno script locale.

Restrizioni di memoria e processore

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

Si noti che il tempo di esecuzione della funzione può differire dalla produzione quando le funzioni vengono eseguite nell'emulatore. È consigliabile che dopo aver progettato e testato le funzioni con l'emulatore, si eseguano test limitati in produzione per confermare i tempi di esecuzione.

Pianificazione delle differenze negli ambienti locali e di produzione

Poiché l'emulatore viene eseguito sul computer locale, dipende dall'ambiente locale per le applicazioni e 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 es. ImageMagick da questo tutorial ) possono differire nel comportamento dalla produzione, specialmente se si richiedono versioni diverse o si sviluppano in un ambiente non Linux. Prendi in considerazione la distribuzione della tua copia binaria del programma mancante insieme alla distribuzione della funzione.

  • Allo stesso modo, le utilità integrate (ad esempio, i comandi della shell come ls , mkdir ) possono differire dalle versioni disponibili in produzione, specialmente se stai sviluppando in un ambiente non Linux (ad esempio, macOS). Puoi gestire questo problema usando alternative solo Node ai comandi nativi o creando binari Linux da raggruppare con la tua distribuzione.

Nuovo tentativo

L'emulatore di Cloud Functions non supporta la ripetizione delle funzioni in caso di errore.

E dopo?