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
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
a ogni comando dell'emulatore.
Local Emulator Suite supporta l'emulazione di progetti Firebase reali e progetti demo.
Tipo di progetto | Funzionalità | Utilizzo con emulatori |
---|---|---|
Reale |
Un vero progetto Firebase è un progetto 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 il progetto Firebase. |
Quando lavori con progetti Firebase reali, puoi eseguire emulatori per uno o tutti i prodotti supportati. Per i prodotti non emulati, le tue app e il tuo codice interagiscono con la risorsa live (istanza del 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 per i progetti demo hanno il prefisso |
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 la quale non è in esecuzione un emulatore, il codice non andrà a buon fine. |
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.
Imposta la tua app per comunicare con gli emulatori
Esegui l'instrumentazione dell'app per le funzioni richiamabili
Se le attività di test e del prototipo prevedono funzioni di backend richiamabili, configura l'interazione con l'emulatore Cloud Functions for Firebase come segue:
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);
Esegui l'instrumentazione dell'app per l'emulazione delle funzioni HTTPS
Ogni funzione HTTPS nel codice verrà pubblicata dall'emulatore locale utilizzando il seguente formato dell'URL:
http://$HOST:$PORT/$PROJECT/$REGION/$NAME
Ad esempio, una semplice funzione helloWorld
con la porta e la regione host predefinite verrà pubblicata all'indirizzo:
https://localhost:5001/$PROJECT/us-central1/helloWorld
Strumenta l'app per l'emulazione delle funzioni della coda di attività
L'emulatore configura automaticamente le code di attività emulate in base alle definizioni degli attivatori e l'Admin SDK reindirizza le richieste 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, pertanto non dovresti aspettarti che il comportamento simulato rispecchi esattamente gli ambienti di produzione. I parametri all'interno di fornisce limiti superiori alla frequenza di invio delle attività e riprova.
Esegui l'instrumentazione dell'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.
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 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 la variabile di ambiente EVENTARC_EMULATOR
su localhost:9299
nel processo corrente se l'emulatore Eventarc è in esecuzione. I 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.
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 Functions in Emulator Suite UI per informazioni dettagliate sull'esecuzione dell'handler.
Configurare un ambiente di test locale
Se le tue funzioni si basano su configurazione dell'ambiente basata su dotenv, puoi emulare questo comportamento nell'ambiente di test locale.
Quando utilizzi un emulatore Cloud Functions locale, puoi eseguire l'override dell'ambiente
per il tuo progetto configurando un file .env.local
. 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 diversi per lo sviluppo e i test locali:
.env
|
.env.dev
|
.env.local
|
PIANO=Terra
SEGMENTO DI PUBBLICO=umani |
AUDIENCE=Dev Humans | AUDIENCE=Persone locali |
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
Credenziali e dati segreti 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 tenta di accedere ai secret di produzione utilizzando 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.
Come per il supporto dell'emulatore Cloud Functions per le variabili di ambiente, puoi:
esegui l'override dei valori dei secret configurando un file .secret.local
. In questo modo,
puoi testare facilmente le funzioni localmente, soprattutto se non hai accesso
al valore del secret.
Quali altri strumenti per il test di Cloud Functions esistono?
L'emulatore Cloud Functions è integrato da altri strumenti di test e prototipazione:
- La shell di Cloud Functions, che consente funzioni iterative interattive la prototipazione e lo sviluppo. La shell utilizza l'emulatore Cloud Functions con un'interfaccia in stile REPL per lo sviluppo. Nessuna integrazione con Sono forniti emulatori Cloud Firestore o Realtime Database. Tramite la shell, simulare i dati ed eseguire chiamate di funzione per simulare l'interazione con i prodotti attualmente Local Emulator Suite non supporta: Analytics, Remote Config e Crashlytics.
- L'SDK di test Firebase per Cloud Functions, un framework Node.js con Mocha per lo sviluppo di funzioni. In effetti, l'SDK di test di Cloud Functions fornisce 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 simile all'ambiente di produzione per la maggior parte dei casi d'uso. Ci siamo impegnati per garantire all'interno del runtime del nodo è il più vicino possibile alla produzione. Tuttavia, l'emulatore non simula l'ambiente di produzione containerizzato completo, pertanto, 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 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 del processore
L'emulatore non applica limitazioni di memoria o del 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 delle funzioni può differire dalla produzione quando le funzioni sono 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.
Pianificare le differenze tra gli ambienti locali e di produzione
Poiché l'emulatore viene eseguito sulla tua macchina locale, dipende dalla configurazione 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:
Il comportamento delle applicazioni installate localmente per simulare l'ambiente di produzione (ad es. ImageMagick di questo tutorial) può essere diverso da quello in produzione, soprattutto se hai bisogno di versioni diverse o sviluppi in un ambiente non Linux. Valuta la possibilità di eseguire il deployment della tua copia in formato binario 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?
- Per una selezione di video ed esempi dettagliati di istruzioni, segui la playlist di formazione Firebase Emulators.
- Scopri di più sull'emulatore Cloud Functions for Firebase in Eseguire funzioni localmente.