Prima di connettere l'app all'emulatore Cloud Functions, assicurati che tu comprenda il flusso di lavoro Firebase Local Emulator Suite generale, e che tu installi e configuri il Local Emulator Suite e riveda i relativi comandi CLI.
Scegliere un progetto Firebase
Il 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 CLI nella directory di lavoro. In alternativa, puoi passare
il --project flag a ogni comando dell'emulatore.
Local Emulator Suite supporta l'emulazione di progetti Firebase reali e progetti demo.
| Tipo di progetto | Funzionalità | Utilizzo con gli emulatori |
|---|---|---|
| Reale |
Un progetto Firebase reale è un progetto che hai creato e configurato (molto probabilmente tramite la Firebase console). 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 gli 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 non ha risorse live. In genere, si accede a questi progetti tramite codelab o altri tutorial. Gli ID progetto per i progetti demo hanno il prefisso |
Quando lavori con progetti Firebase demo, le tue app e il tuo codice interagiscono con gli emulatori solo. Se la tua app tenta di interagire con una risorsa per la quale non è in esecuzione un emulatore, il codice non verrà eseguito. |
Ti consigliamo di utilizzare i progetti demo, se 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 non emulate (di produzione), non c'è alcuna possibilità di modifica dei dati, utilizzo e fatturazione
- Migliore supporto offline, poiché non è necessario accedere a internet per scaricare la configurazione dell'SDK.
Strumentare l'app per comunicare con gli emulatori
Strumentare l'app per le funzioni richiamabili
Se le attività di prototipazione e test coinvolgono funzioni di backend richiamabili, configura l'interazione con l'emulatore Cloud Functions for Firebase nel seguente modo:
Kotlin
// 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().useEmulator(withHost: "localhost", port: 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);
Strumentare l'app per l'emulazione delle funzioni HTTPS
Ogni funzione HTTPS nel codice verrà pubblicata 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 verrà pubblicata all'indirizzo:
https://localhost:5001/$PROJECT/us-central1/helloWorld
Strumentare l'app per l'emulazione delle funzioni della coda di attività
L'emulatore configura automaticamente le code di attività emulate in base alle definizioni dei trigger e l'SDK Admin reindirizza le richieste inserite in coda all'emulatore se rileva che è in esecuzione tramite la variabile di ambiente CLOUD_TASKS_EMULATOR_HOST.
Tieni presente che il sistema di invio utilizzato in produzione è più complesso di quello implementato nell'emulatore, quindi non devi aspettarti che il comportamento emulato rifletta con precisione gli ambienti di produzione. I parametri all'interno dell'emulatore forniscono limiti superiori alla frequenza con cui le attività vengono inviate e riprovate.
Strumentare l'app per l'emulazione delle funzioni attivate in background
L'emulatore Cloud Functions supporta le funzioni attivate in background dalle seguenti origini:
- Emulatore Realtime Database
- Emulatore Cloud Firestore
- Authentication emulatore
- Pub/Sub emulatore
- Emulatore di avvisi Firebase
Per attivare gli eventi in background, modifica le risorse di backend utilizzando Emulator Suite UI, oppure connettendo l'app o il codice di test agli emulatori utilizzando l'SDK per la tua piattaforma.
Testare i gestori per gli eventi personalizzati emessi dalle estensioni
Per le funzioni che implementi per gestire gli eventi personalizzati Firebase Extensions con Cloud Functions v2, l'emulatore Cloud Functions si accoppia con l'emulatore di 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 Cloud Functions imposta la variabile
di ambiente EVENTARC_EMULATOR su localhost:9299 nel processo corrente se l'emulatore di Eventarc
è in esecuzione. Gli Firebase Admin SDK si connettono automaticamente all'emulatore di Eventarc
quando è impostata la variabile di ambiente EVENTARC_EMULATOR. Puoi
modificare la porta predefinita come descritto in Configurare Local Emulator Suite.
Quando le variabili di ambiente sono configurate correttamente, il Firebase Admin SDK invia automaticamente gli eventi all'emulatore di Eventarc. A sua volta, l'emulatore di Eventarc richiama l'emulatore Cloud Functions per attivare tutti i gestori registrati.
Puoi controllare i log delle funzioni nel Emulator Suite UI 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 questo comportamento nel tuo ambiente di test locale.
Quando utilizzi un emulatore Cloud Functions locale, puoi sostituire le 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 il test locale:
.env
|
.env.dev
|
.env.local
|
| PLANET=Earth
AUDIENCE=Humans |
AUDIENCE=Dev Humans | AUDIENCE=Local Humans |
Quando viene avviato nel contesto locale, l'emulatore carica le variabili di ambiente come mostrato di seguito:
$ firebase emulators:start
i emulators: Starting emulators: functions
# Starts emulator with following environment variables:
# PLANET=Earth
# AUDIENCE=Local Humans
Secret e credenziali nell'Cloud Functions emulator
L'Cloud Functions emulator 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 alcune situazioni, come gli ambienti CI, l'emulatore potrebbe non riuscire ad accedere ai valori dei secret a causa di limitazioni delle autorizzazioni.
Analogamente al supporto dell'Cloud Functions emulatore per le variabili di ambiente, puoi
sostituire i valori dei secret configurando un file .secret.local. In questo modo, puoi testare facilmente le tue funzioni in locale, soprattutto se non hai accesso al valore del secret.
Quali altri strumenti per testare Cloud Functions esistono?
L'Cloud Functions emulatore è integrato da altri strumenti di prototipazione e test tools:
- La shell di Cloud Functions, che consente la prototipazione e lo sviluppo di funzioni interattive e iterative. La shell utilizza l'emulatore di Cloud Functions con un'interfaccia in stile REPL per lo sviluppo. Non è fornita alcuna integrazione con gli emulatori Cloud Firestore o Realtime Database. Utilizzando la shell, puoi simulare i dati ed eseguire chiamate di funzioni per simulare l'interazione con i prodotti che il Local Emulator Suite non supporta attualmente: Analytics, Remote Config e Crashlytics.
- L'SDK Firebase Test per Cloud Functions, un framework Node.js con mocha per lo sviluppo di funzioni. In effetti, l'SDK Test di Cloud Functions fornisce l'automazione sopra la shell di Cloud Functions.
Per saperne di più sulla shell di Cloud Functions e sull'SDK Test di Cloud Functions consulta Testare le funzioni in modo interattivo e Test unitari di Cloud Functions.
Differenze tra l'em0/} emulatore e la produzioneCloud Functions
L'Cloud Functions emulatore è abbastanza simile all'ambiente di produzione per la maggior parte dei casi d'uso. Abbiamo lavorato molto per garantire che tutto all'interno del runtime Node sia il più vicino possibile alla produzione. Tuttavia, l'emulatore non imita l'ambiente di produzione containerizzato completo, quindi, anche se il codice della funzione verrà eseguito in modo realistico, altri aspetti dell'ambiente (ad es. file locali, comportamento dopo gli arresti anomali delle funzioni e così via) saranno diversi.
Cloud IAM
Firebase Emulator Suite non tenta di replicare o rispettare alcun comportamento correlato a IAM per l'esecuzione. Gli emulatori rispettano le regole di sicurezza di Firebase fornite, ma nelle situazioni in cui IAM verrebbe normalmente utilizzato, ad esempio per impostare il service account di chiamata di Cloud Functions e quindi le autorizzazioni, l'emulatore non è configurabile e utilizzerà l'account disponibile a livello globale sulla macchina dello sviluppatore, 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 le funzioni. Tuttavia, l'emulatore supporta il timeout delle funzioni tramite l'argomento runtime timeoutSeconds.
Tieni presente che il tempo di esecuzione delle funzioni potrebbe essere diverso dalla produzione quando le funzioni vengono eseguite nell'emulatore. Ti consigliamo di eseguire test limitati in produzione per confermare i tempi di esecuzione dopo aver progettato e testato le funzioni con l'emulatore.
Pianificare le differenze tra gli ambienti locali e di produzione
Poiché l'emulatore viene eseguito sulla macchina locale, dipende dall'ambiente locale per le applicazioni e i programmi e le utilità integrati.
Tieni presente che l'ambiente locale per lo sviluppo Cloud Functions potrebbe essere diverso dall'ambiente di produzione di Google:
Le applicazioni che installi localmente per simulare l'ambiente di produzione (ad es. ImageMagick da questo tutorial) potrebbero avere un comportamento diverso dalla produzione, soprattutto se richiedi versioni diverse o sviluppi in un ambiente non Linux. Valuta la possibilità di eseguire il deployment della tua copia binaria del programma mancante insieme al deployment della funzione.
Allo stesso modo, le utilità integrate (ad es. i comandi della shell come
ls,mkdir) potrebbero essere diverse dalle versioni disponibili in produzione, soprattutto se sviluppi in un ambiente non Linux (ad es. macOS). Puoi risolvere questo problema utilizzando alternative solo Node ai comandi nativi o creando file binari Linux da includere nel deployment.
Nuovi tentativi
L'emulatore di Cloud Functions non supporta i nuovi tentativi di esecuzione delle funzioni in caso di errore.
Cosa devo fare adesso?
- Per una serie di video e esempi pratici dettagliati, segui la playlist di formazione su Firebase Emulators.
- Scopri di più sull'Cloud Functions for Firebase emulatore in Eseguire le funzioni in locale.