Collega la tua app all'emulatore di funzioni cloud

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 e di installare e configurare Local Emulator Suite e di rivedere i suoi 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 esegui firebase use nella tua 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 in tempo reale, 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 codice interagiranno con la risorsa live (istanza del database, bucket di archiviazione, funzione, ecc.).

Demo

Un progetto Firebase demo non ha una configurazione Firebase reale e nessuna risorsa attiva. Questi progetti sono generalmente accessibili tramite codelab o altri tutorial.

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

Quando lavori con progetti Firebase demo, le tue app e il codice interagiscono solo con gli emulatori . Se l'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.

Strumento la tua app per parlare con gli emulatori

Strumento la tua app per funzioni richiamabili

Se le tue attività di prototipazione e test coinvolgono funzioni di backend richiamabili , configura l'interazione con l'emulatore Cloud Functions for Firebase in questo modo:

Androide
        // 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://localhost:5001")

Web version 9

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

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

Web version 8

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

Strumenta la tua app per l'emulazione delle funzioni HTTPS

Ogni funzione HTTPS nel 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

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

L'emulatore 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, collega la tua app o testa il codice agli emulatori utilizzando l'SDK per la tua piattaforma.

Configura 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 di Cloud Functions locale, puoi sovrascrivere le variabili di ambiente per il tuo progetto impostando un file .env.local . Il contenuto di .env.local 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 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 Cloud Functions

L'emulatore di 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 tuoi 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 di Cloud Functions per le variabili di ambiente, puoi sovrascrivere i valori dei segreti impostando un file .secret.local . Ciò semplifica il test delle tue funzioni in locale, soprattutto se non hai accesso al valore segreto.

Quali altri strumenti esistono per testare le funzioni cloud?

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. Usando la shell, prendi in giro i dati ed esegui chiamate di funzione per simulare l'interazione con prodotti che la suite di emulatore locale non supporta attualmente: Analytics, Remote Config e Crashlytics.
  • Firebase Test SDK for 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 Cloud Functions Test in Test functions interactively and Unit testing of 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 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 relativo 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 impone restrizioni 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. Dopo aver progettato e testato le funzioni con l'emulatore, ti consigliamo di eseguire 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. Considera la possibilità di distribuire la tua copia binaria del programma mancante insieme alla distribuzione della tua funzione.

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

Riprova

L'emulatore di Cloud Functions non supporta il tentativo di eseguire nuovamente le funzioni in caso di errore.

E dopo?