I trigger di Firestore ti consentono di eseguire automaticamente funzioni ogni volta che i documenti di una raccolta specificata vengono creati, aggiornati o eliminati. In questo modo, puoi elaborare le modifiche ai dati in tempo reale, sincronizzare i sistemi esterni e automatizzare i flussi di lavoro di backend.
Prima di iniziare
Prima di eseguire il codice campione in questa guida, devi:
- Abilita le API e concedi i ruoli richiesti per il deployment delle funzioni
- Configura un database Firestore
Esempi
I seguenti esempi mostrano come scrivere funzioni che rispondono a un trigger Firestore.
Esempio 1: funzione Hello Firestore
L'esempio seguente stampa i campi di un evento Firestore di attivazione:
Node.js
Python
Go
Java
C#
Esegui il deployment della funzione Hello Firestore
Se non l'hai ancora fatto, configura il tuo database Firestore.
Dopo aver eseguito il deployment di una funzione, puoi configurare un trigger utilizzando la console Google Cloud , Google Cloud CLI o Terraform.
Console
Quando utilizzi la console Google Cloud per creare una funzione, puoi anche aggiungere un trigger alla funzione. Per creare un trigger per la tua funzione, segui questi passaggi:
Nella console Google Cloud , vai a Cloud Run:
Fai clic su Scrivi una funzione e inserisci i dettagli della funzione. Per saperne di più sulla configurazione delle funzioni durante il deployment, consulta Esegui il deployment delle funzioni.
Nella sezione Trigger, fai clic su Aggiungi trigger.
Seleziona Trigger Firestore.
Nel riquadro Trigger Eventarc, modifica i dettagli del trigger come segue:
Inserisci un nome per il trigger nel campo Nome trigger o utilizza il nome predefinito.
Seleziona un Tipo di trigger dall'elenco:
Origini Google per specificare i trigger per Pub/Sub, Cloud Storage, Firestore e altri provider di eventi Google.
Di terze parti per l'integrazione con provider non Google che offrono un'origine Eventarc. Per saperne di più, consulta Eventi di terze parti in Eventarc.
Seleziona Cloud Firestore dall'elenco Provider di eventi per selezionare un prodotto che fornisce il tipo di evento per l'attivazione della funzione. Per l'elenco dei provider di eventi, consulta Provider e destinazioni di eventi.
Seleziona type=google.cloud.firestore.document.v1.written dall'elenco Tipo di evento. La configurazione del trigger varia a seconda del tipo di evento supportato. Per saperne di più, consulta Tipi di eventi.
Lascia invariato il campo Tipo di contenuti dei dati sugli eventi.
Nella sezione Filtri, seleziona un database, un'operazione e i valori degli attributi oppure utilizza le selezioni predefinite.
Se il campo Regione è abilitato, seleziona una località per il trigger Eventarc. In generale, la località di un trigger Eventarc deve corrispondere a quella della risorsaGoogle Cloud di cui vuoi monitorare gli eventi. Nella maggior parte degli scenari, devi eseguire il deployment della funzione nella stessa regione. Per ulteriori dettagli sulle località dei trigger Eventarc, consulta Informazioni sulle località Eventarc.
Nel campo Service account, seleziona un account di servizio. I trigger Eventarc sono collegati ai service account da utilizzare come identità quando richiami la funzione. Il account di servizio del trigger Eventarc deve disporre dell'autorizzazione per richiamare la funzione. Per impostazione predefinita, Cloud Run utilizza l'account di servizio predefinito di Compute Engine.
Facoltativamente, specifica il percorso dell'URL del servizio a cui inviare la richiesta in entrata. Questo è il percorso relativo nel servizio di destinazione a cui devono essere inviati gli eventi per il trigger. Ad esempio:
/,/route,routeeroute/subroute.Facoltativamente, per abilitare i nuovi tentativi se il tentativo di invio non va a buon fine, seleziona la casella di controllo Abilita nuovo tentativo in caso di errore; in caso contrario, il comportamento predefinito è un singolo tentativo di invio senza nuovi tentativi. Per saperne di più, consulta Ripeti gli eventi.
Dopo aver compilato i campi obbligatori, fai clic su Salva attivatore.
Fai clic su Crea.
Nella scheda Origine, modifica il codice sorgente, se necessario, quindi seleziona Salva e rifai il deployment.
gcloud
Quando crei una funzione utilizzando gcloud CLI, devi prima eseguire il deployment della funzione, quindi creare un trigger. Per creare un trigger per la tua funzione, segui questi passaggi:
Esegui questo comando nella directory che contiene il codice campione per eseguire il deployment della funzione:
gcloud run deploy FUNCTION \ --source . \ --function FUNCTION_ENTRYPOINT \ --base-image BASE_IMAGE_ID \ --region REGIONSostituisci quanto segue:
FUNCTION: il nome della funzione di cui stai eseguendo il deployment. Puoi omettere completamente questo parametro, ma se lo ometti, ti verrà richiesto il nome.FUNCTION_ENTRYPOINT: l'entry point della funzione nel codice sorgente. Questo è il codice che Cloud Run esegue quando viene eseguita la funzione. Il valore di questo flag deve essere un nome di funzione o un nome di classe completo esistente nel codice sorgente.BASE_IMAGE_ID: l'ambiente dell'immagine di base per la tua funzione. Per maggiori dettagli sulle immagini di base e sui pacchetti inclusi in ogni immagine, consulta Immagini di base dei runtime.REGION: la regione Google Cloudin cui vuoi eseguire il deployment della funzione. Ad esempio:europe-west1.
Esegui questo comando per creare un trigger che filtra ed esegue il routing degli eventi:
gcloud eventarc triggers create TRIGGER_NAME \ --location=LOCATION \ --destination-run-service=FUNCTION \ --destination-run-region=DESTINATION_RUN_REGION \ --event-filters="type=EVENT_FILTER_TYPE" \ --event-filters=database='(default)' \ --event-data-content-type=application/protobuf \ --event-filters-path-pattern=document='users/{username}' \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.comSostituisci quanto segue:
TRIGGER_NAME: l'ID del trigger o un identificatore completo.LOCATION: la località del trigger Eventarc. In alternativa, puoi impostare la proprietàeventarc/location, ad esempiogcloud config set eventarc/location us-central1.Per evitare problemi di prestazioni e residenza dei dati, la località deve corrispondere a quella del servizio Google Cloud che genera gli eventi. Per saperne di più, consulta Località di Eventarc.
-
FUNCTION: il nome della funzione Cloud Run di cui è stato eseguito il deployment che riceve gli eventi per il trigger. -
DESTINATION_RUN_REGION: (facoltativo) la posizione di Cloud Run in cui si trova la funzione Cloud Run di destinazione. Se non specificata, si presume che la funzione si trovi nella stessa regione del trigger. EVENT_FILTER_TYPE: l'identificatore dell'evento. Viene generato un evento quando una chiamata API per il metodo ha esito positivo. Per le operazioni a lunga esecuzione, l'evento viene generato solo al termine dell'operazione e solo se l'azione viene eseguita correttamente. Per un elenco dei tipi di eventi supportati, consulta Tipi di eventi Google supportati da Eventarc.SERVICE_ACCOUNT_NAME: il nome del tuo account di servizio gestito dall'utente.PROJECT_ID: il tuo ID progetto Google Cloud .
Note:
- Dopo aver creato un trigger, il tipo di filtro degli eventi non può essere modificato. Per un tipo di evento diverso, devi creare un nuovo trigger.
--event-filters=type=google.cloud.firestore.document.v1.writtenspecifica che la funzione viene attivata quando un documento viene creato, aggiornato o eliminato, in base al tipo di evento.--event-filters=database='(default)'specifica il database Firebase. Per il nome del database predefinito, utilizza(default).--event-filters-path-pattern=document='users/{username}'fornisce il pattern del percorso dei documenti che devono essere monitorati per rilevare modifiche pertinenti. Questo pattern di percorso indica che devono essere monitorati tutti i documenti della raccoltausers. Per saperne di più, consulta Informazioni sui pattern di percorso.- Facoltativamente, per specificare un singolo tentativo di invio di eventi senza nuovi tentativi, utilizza il flag
--max-retry-attempts. L'unico valore valido è1. Se ometti il flag, viene applicato il comportamento di ripetizione standard. Per saperne di più, consulta Eventi di ripetizione. - Sono disponibili altri flag. Per saperne di più, vedi
gcloud eventarc triggers create.
Terraform
Per creare un trigger Eventarc per una funzione Cloud Run, consulta Crea un trigger utilizzando Terraform.
Testa la funzione Hello Firestore
Per testare la funzione Hello Firestore, configura una raccolta denominata users nel tuo database Firestore:
Nella console Google Cloud , vai alla pagina dei database Firestore:
Fai clic su Avvia una raccolta.
Specifica
userscome ID raccolta.Per iniziare ad aggiungere il primo documento della raccolta, in Aggiungi il primo documento, accetta l'ID documento generato automaticamente.
Aggiungi almeno un campo per il documento, specificando un nome e un valore. Ad esempio, in Nome campo, inserisci
usernamee in Valore campo, inseriscirowan.Quando hai terminato, fai clic su Salva.
Questa azione crea un nuovo documento, attivando così la funzione.
Per verificare che la funzione sia stata attivata, fai clic sul nome collegato della funzione nella pagina Panoramica di Cloud Run della console Google Cloud per aprire la pagina Dettagli servizio.
Nella scheda Osservabilità, seleziona la scheda Log e cerca la seguente stringa:
Function triggered by change to: //firestore.googleapis.com/projects/your-project-id/databases/(default)'
Esempio 2: funzione Converti in maiuscolo
L'esempio seguente recupera il valore aggiunto dall'utente, converte la stringa in quella posizione in maiuscolo e sostituisce il valore con la stringa in maiuscolo:
Node.js
Utilizza protobufjs per decodificare i dati sugli eventi. Includi google.events.cloud.firestore.v1
data.proto
nella tua origine.
Python
Go
Java
C#
Esegui il deployment della funzione Converti in maiuscolo
Se non l'hai ancora fatto, configura il tuo database Firestore.
Dopo aver eseguito il deployment di una funzione, puoi configurare un trigger utilizzando la console Google Cloud , Google Cloud CLI o Terraform.
Console
Quando utilizzi la console Google Cloud per creare una funzione, puoi anche aggiungere un trigger alla funzione. Per creare un trigger per la tua funzione, segui questi passaggi:
Nella console Google Cloud , vai a Cloud Run:
Fai clic su Scrivi una funzione e inserisci i dettagli della funzione. Per saperne di più sulla configurazione delle funzioni durante il deployment, consulta Esegui il deployment delle funzioni.
Nella sezione Trigger, fai clic su Aggiungi trigger.
Seleziona Trigger Firestore.
Nel riquadro Trigger Eventarc, modifica i dettagli del trigger come segue:
Inserisci un nome per il trigger nel campo Nome trigger o utilizza il nome predefinito.
Seleziona un Tipo di trigger dall'elenco:
Origini Google per specificare i trigger per Pub/Sub, Cloud Storage, Firestore e altri provider di eventi Google.
Di terze parti per l'integrazione con provider non Google che offrono un'origine Eventarc. Per saperne di più, consulta Eventi di terze parti in Eventarc.
Seleziona Firestore dall'elenco Provider di eventi per selezionare un prodotto che fornisce il tipo di evento per l'attivazione della funzione. Per l'elenco dei provider di eventi, consulta Provider e destinazioni di eventi.
Seleziona type=google.cloud.firestore.document.v1.written dall'elenco Tipo di evento. La configurazione del trigger varia a seconda del tipo di evento supportato. Per saperne di più, consulta Tipi di eventi.
Lascia invariato il campo Tipo di contenuti dei dati sugli eventi.
Nella sezione Filtri, seleziona un database, un'operazione e i valori degli attributi oppure utilizza le selezioni predefinite. Se hai assegnato un nome al database, inseriscilo nel campo Valore dell'attributo 1.
Se il campo Regione è abilitato, seleziona una località per il trigger Eventarc. In generale, la località di un trigger Eventarc deve corrispondere a quella della risorsaGoogle Cloud di cui vuoi monitorare gli eventi. Nella maggior parte degli scenari, devi eseguire il deployment della funzione nella stessa regione. Per ulteriori dettagli sulle località dei trigger Eventarc, consulta Informazioni sulle località Eventarc.
Nel campo Service account, seleziona un account di servizio. I trigger Eventarc sono collegati ai service account da utilizzare come identità quando richiami la funzione. Il account di servizio del trigger Eventarc deve disporre dell'autorizzazione per richiamare la funzione. Per impostazione predefinita, Cloud Run utilizza l'account di servizio predefinito di Compute Engine.
Facoltativamente, specifica il percorso dell'URL del servizio a cui inviare la richiesta in entrata. Questo è il percorso relativo nel servizio di destinazione a cui devono essere inviati gli eventi per il trigger. Ad esempio:
/,/route,routeeroute/subroute.Facoltativamente, per abilitare i nuovi tentativi se il tentativo di invio non va a buon fine, seleziona la casella di controllo Abilita nuovo tentativo in caso di errore; in caso contrario, il comportamento predefinito è un singolo tentativo di invio senza nuovi tentativi. Per saperne di più, consulta Ripeti gli eventi.
Dopo aver compilato i campi obbligatori, fai clic su Salva attivatore.
Fai clic su Crea.
Nella scheda Origine, modifica il codice sorgente, se necessario, quindi seleziona Salva e rifai il deployment.
gcloud
Quando crei una funzione utilizzando gcloud CLI, devi prima eseguirne il deployment e poi creare un trigger. Per creare un trigger per la tua funzione, segui questi passaggi:
Esegui questo comando nella directory che contiene il codice campione per eseguire il deployment della funzione:
gcloud run deploy FUNCTION \ --source . \ --function FUNCTION_ENTRYPOINT \ --base-image BASE_IMAGE_ID \ --region REGIONSostituisci quanto segue:
FUNCTION: il nome della funzione di cui stai eseguendo il deployment. Puoi omettere completamente questo parametro, ma se lo ometti, ti verrà richiesto il nome.FUNCTION_ENTRYPOINT: l'entry point della funzione nel codice sorgente. Questo è il codice che Cloud Run esegue quando viene eseguita la funzione. Il valore di questo flag deve essere un nome di funzione o un nome di classe completo esistente nel codice sorgente.BASE_IMAGE_ID: l'ambiente dell'immagine di base per la tua funzione. Per maggiori dettagli sulle immagini di base e sui pacchetti inclusi in ogni immagine, consulta Immagini di base dei runtime.REGION: la regione Google Cloudin cui vuoi eseguire il deployment della funzione. Ad esempio:europe-west1.
Esegui questo comando per creare un trigger che filtra ed esegue il routing degli eventi:
gcloud eventarc triggers create TRIGGER_NAME \ --location=LOCATION \ --destination-run-service=FUNCTION \ --destination-run-region=DESTINATION_RUN_REGION \ --event-filters=type=google.cloud.firestore.document.v1.written \ --event-filters=database='(default)' \ --event-data-content-type=application/protobuf \ --event-filters-path-pattern=document='messages/{pushId}' \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.comSostituisci quanto segue:
TRIGGER_NAME: l'ID del trigger o un identificatore completo.LOCATION: la località del trigger Eventarc. In alternativa, puoi impostare la proprietàeventarc/location, ad esempiogcloud config set eventarc/location us-central1.Per evitare problemi di prestazioni e residenza dei dati, la località deve corrispondere a quella del servizio Google Cloud che genera gli eventi. Per saperne di più, consulta Località di Eventarc.
-
FUNCTION: il nome della funzione Cloud Run di cui è stato eseguito il deployment che riceve gli eventi per il trigger. -
DESTINATION_RUN_REGION: (facoltativo) la località Cloud Run in cui si trova la funzione Cloud Run di destinazione. Se non specificata, si presume che la funzione si trovi nella stessa regione del trigger. EVENT_FILTER_TYPE: l'identificatore dell'evento. Viene generato un evento quando una chiamata API per il metodo ha esito positivo. Per le operazioni a lunga esecuzione, l'evento viene generato solo al termine dell'operazione e solo se l'azione viene eseguita correttamente. Per un elenco dei tipi di eventi supportati, consulta Tipi di eventi Google supportati da Eventarc.SERVICE_ACCOUNT_NAME: il nome del tuo account di servizio gestito dall'utente.PROJECT_ID: il tuo ID progetto Google Cloud .
Note:
- Dopo aver creato un trigger, il tipo di filtro degli eventi non può essere modificato. Per un tipo di evento diverso, devi creare un nuovo trigger.
--event-filters=type=google.cloud.firestore.document.v1.writtenspecifica che la funzione viene attivata quando un documento viene creato, aggiornato o eliminato, in base al tipo di evento.--event-filters=database='(default)'specifica il database Firebase. Per il nome del database predefinito, utilizza(default).--event-filters-path-pattern=document='users/{username}'fornisce il pattern del percorso dei documenti che devono essere monitorati per rilevare modifiche pertinenti. Questo pattern di percorso indica che devono essere monitorati tutti i documenti della raccoltausers. Per saperne di più, consulta Informazioni sui pattern di percorso.- Facoltativamente, per specificare un singolo tentativo di invio di eventi senza nuovi tentativi, utilizza il flag
--max-retry-attempts. L'unico valore valido è1. Se ometti il flag, viene applicato il comportamento di ripetizione standard. Per saperne di più, consulta Eventi di ripetizione. - Sono disponibili altri flag. Per saperne di più, vedi
gcloud eventarc triggers create.
Terraform
Per creare un trigger Eventarc per una funzione Cloud Run, consulta Crea un trigger utilizzando Terraform.
Utilizza gli altri campi così come sono:
--event-filters=type=google.cloud.firestore.document.v1.writtenspecifica che la funzione viene attivata quando un documento viene creato, aggiornato o eliminato, in base al tipo di eventogoogle.cloud.firestore.document.v1.written.--event-filters=database='(default)'specifica il database Firestore. Per il nome del database predefinito, utilizza(default).--event-filters-path-pattern=document='messages/{pushId}'fornisce il pattern del percorso dei documenti che devono essere monitorati per rilevare modifiche pertinenti. Questo pattern di percorso indica che devono essere monitorati tutti i documenti della raccoltamessages. Per saperne di più, consulta Informazioni sui pattern di percorso.
Testa la funzione Convert to Uppercase
Per testare la funzione Converti in maiuscolo di cui hai appena eseguito il deployment, configura una raccolta denominata messages nel tuo database Firestore:
Nella console Google Cloud , vai alla pagina dei database Firestore:
Seleziona l'ID database per il tuo database Firestore.
Fai clic su Avvia una raccolta.
Specifica
messagescome ID raccolta.Per iniziare ad aggiungere il primo documento della raccolta, in Aggiungi il primo documento, accetta l'ID documento generato automaticamente.
Per attivare la funzione di cui hai eseguito il deployment, aggiungi un documento in cui il Nome campo è
originale il Valore campo èminka.Quando salvi il documento, la parola in minuscolo nel campo del valore viene convertita in maiuscolo.
Se in un secondo momento modifichi il valore del campo in modo che contenga lettere minuscole, la funzione viene attivata di nuovo e converte tutte le lettere minuscole in maiuscole.
Limitazioni per le funzioni
- L'ordinamento non è garantito. Le modifiche rapide possono attivare le chiamate di funzioni in un ordine imprevisto.
- Gli eventi vengono inviati almeno una volta, ma un singolo evento può comportare più chiamate di funzione. Evita di fare affidamento sulla meccanica di esecuzione "esattamente una volta" e scrivi funzioni idempotenti.
- Un trigger è associato a un singolo database. Non puoi creare un trigger che corrisponda a più database.
- L'eliminazione di un database non comporta l'eliminazione automatica di eventuali trigger per quel database. Il trigger smette di inviare eventi, ma continua a esistere finché non lo elimini.