Scrivere funzioni basate su eventi
In Cloud Functions, utilizzi le funzioni basate su eventi quando vuoi che una funzione da richiamare automaticamente in risposta a un evento che si verifica nel tuo completamente gestito di Google Cloud.
Esistono due modi per implementare le funzioni basate su eventi. Quale modalità di utilizzo dipende dal runtime del linguaggio che hai scelto:
- Per i runtime Node.js, Python, Go e Java, utilizza Funzioni in background.
- Per i runtime .NET, Ruby e PHP, utilizza Funzioni CloudEvent.
Funzioni CloudEvent
Le funzioni di CloudEvent si basano su CloudEvents, uno standard di settore per descrivere i dati sugli eventi in modo comune. Puoi scoprire di più sulla specifica CloudEvents Repository GitHub di CloudEvents. Il progetto CloudEvents offre anche una serie SDK CloudEvents per lavorare con gli oggetti Cloud Events nel tuo codice.
L'esempio seguente mostra un file di origine della funzione CloudEvent di base per ogni runtime. Consulta Struttura della directory di origine per informazioni su dove trovare il codice sorgente.
C#
using CloudNative.CloudEvents; using Google.Cloud.Functions.Framework; using System.Threading; using System.Threading.Tasks; namespace MyProject { // Define a class that implements the ICloudEventFunction<T> interface public class MyCloudEventFunction : ICloudEventFunction<CloudEventDataType> { // Implement the HandleAsync() method to handle CloudEvents public Task HandleAsync(CloudEvent cloudEvent, CloudEventDataType data, CancellationToken cancellationToken) { // Your code here // The data argument represents the CloudEvent data payload // Signal function completion return Task.CompletedTask; } } }
Nei runtime .NET, utilizzi
Framework di funzioni per .NET
per implementare una classe di gestore CloudEvent con
ICloudEventFunction<T>
a riga di comando. Il metodo HandleAsync()
accetta un
CloudEvent
e il payload dei dati CloudEvent associato come argomenti.
Il tipo di argomento payload dei dati CloudEvent, mostrato nell'esempio precedente come
CloudEventDataType
, deve corrispondere al tipo di evento
gli handle della funzione. La
Libreria .NET di Google CloudEvents
fornisce i tipi di dati per i vari eventi supportati da Google.
La
punto di accesso alla funzione
è il nome completo della classe di gestori CloudEvent, che include
nello spazio dei nomi. In questo esempio, il punto di ingresso è MyProject.MyCloudEventFunction
.
Ruby
require "functions_framework"
# Register a CloudEvent function with the Functions Framework
FunctionsFramework.cloud_event "my_cloudevent_function" do |cloud_event|
# Your code here
# Access the CloudEvent data payload via cloud_event.data
end
In Ruby, registri una funzione di gestore CloudEvent con il
Framework di funzioni per Ruby.
La tua funzione di gestore deve accettare un evento CloudEvents
Event
come argomento.
La
punto di accesso alla funzione
è il nome con cui il gestore viene registrato nel framework di Functions.
In questo esempio, il punto di ingresso è my_cloudevent_function
.
PHP
<?php
use CloudEvents\V1\CloudEventInterface;
use Google\CloudFunctions\FunctionsFramework;
// Register a CloudEvent function with the Functions Framework
FunctionsFramework::cloudEvent('myCloudEventFunction', 'myCloudEventHandler');
// Define your CloudEvent handler
function myCloudEventHandler(CloudEventInterface $event): void
{
// Your code here
// Access the CloudEvent data payload via $event->getData()
}
In PHP, registri una funzione di gestore CloudEvent con il
Framework di funzioni per PHP.
La tua funzione gestore deve accettare un argomento conforme alle
CloudEventInterface
a riga di comando.
La
punto di accesso alla funzione
è il nome con cui il gestore viene registrato nel framework di Functions.
In questo esempio, il punto di ingresso è myCloudEventFunction
.
Per le funzioni CloudEvent, i dati degli eventi vengono passati alla funzione nel Formato CloudEvents, con un payload di dati CloudEvent corrispondente al tipo di evento che attiva la funzione. Consulta Trigger di Cloud Functions per informazioni su trigger, tipi di eventi e dati di eventi associati supportati formati.
La Google Eventi il repository contiene risorse per l'uso di CloudEvents rilasciate da Google.
Funzioni in background
Funzioni basate su eventi in Node.js, Python, Go, e i runtime Java si aspettano argomenti diversi dalle funzioni CloudEvent. Questo il vecchio stile di funzione basata su eventi è chiamato funzione in background.
L'esempio seguente mostra un file di origine della funzione in background di base per ogni runtime. Consulta Struttura della directory di origine per informazioni su dove trovare il codice sorgente.
Node.js
// Define and export an event handler
exports.myBackgroundFunction = (eventData, context, callback) => {
// Your code here
// The eventData argument represents the event data payload
// Optionally signal function completion:
callback();
};
In Node.js, definisci ed esporti una funzione che gestisce i dati degli eventi. Cloud Functions passa i seguenti argomenti alla funzione gestore:
eventData
: un oggetto che rappresenta il payload dei dati sugli eventi. Il suo formato dipende dal tipo di evento.context
: un oggetto contenente i metadati relativi all'evento.callback
: una funzione facoltativa che puoi richiamare per segnalare il completamento. Il primo a questo callback viene interpretato come segnalazione di un errore. Non trasmettere alcun argomento o un primo argomentonull
per segnalare l'esito positivo.
La
punto di accesso alla funzione
è il nome del gestore di eventi esportati. In questo esempio, il punto di ingresso
è myBackgroundFunction
.
Python
# Define an event handler
def my_background_function(event_data, context):
# Your code here
# The event_data argument represents the event data payload
In Python, definisci una funzione che gestisce i dati degli eventi. Cloud Functions passa i seguenti argomenti alla funzione gestore:
event_data
: un dizionario che rappresenta il payload dei dati sugli eventi. Il suo formato dipende dal tipo di evento.context
: un oggetto contenente i metadati relativi all'evento.
La
punto di accesso alla funzione
è il nome della funzione gestore. In questo esempio, il punto di ingresso
my_background_function
.
Vai
package mybackgroundfunction import ( "context" ) // Function MyBackgroundFunction accepts and handles event data func MyBackgroundFunction(ctx context.Context, e EventDataType) error { // Your code here // The argument e represents the event data payload // Return nil if no error occurred return nil }
In Go, definisci una funzione esportata che gestisce i dati sugli eventi. Cloud Functions passa i seguenti argomenti alla funzione gestore:
ctx
: un oggettocontext.Context
contenente i metadati relativi all'evento. Puoi recuperare i metadati utilizzandocloud.google.com/go/functions/metadata
pacchetto.e
: un oggetto che rappresenta il payload dei dati sugli eventi. Il tipo, mostrato in nell'esempio precedente, comeEventDataType
, deve essere uno struct corrispondente al tipo di evento gestito dalla funzione. I dati sugli eventi il payload viene disordinato nello structjson.Unmarshal()
La
punto di accesso alla funzione
è il nome del gestore di eventi esportati. In questo esempio, il punto di ingresso
è MyBackgroundFunction
.
Java
package mybackgroundfunction; import com.google.cloud.functions.BackgroundFunction; import com.google.cloud.functions.Context; // Define a class that implements the BackgroundFunction<T> interface public class MyBackgroundFunction implements BackgroundFunction<EventDataType> { // Implement the accept() method to handle events @Override public void accept(EventDataType eventData, Context context) { // Your code here // The eventData argument represents the event data payload } }
In Java, utilizzi
API Java del framework Functions
per implementare una classe di gestione di eventi
BackgroundFunction<T>
a riga di comando. Il metodo accept()
accetta come argomenti il payload dei dati sugli eventi
e un
Context
contenente i metadati relativi all'evento.
Il tipo di argomento payload dei dati sugli eventi, mostrato nell'esempio precedente come
EventDataType
, deve corrispondere al tipo di evento che
gli handle di funzione. Il payload dei dati sugli eventi viene deserializzato in un’istanza di
questo corso utilizzando
Gson.fromJson()
La
punto di accesso alla funzione
è il nome completo della classe di gestore di eventi, compreso il pacchetto
. In questo esempio, il punto di ingresso
mybackgroundfunction.MyBackgroundFunction
.
Per le funzioni in background, il payload dei dati sugli eventi viene passato direttamente in un formato corrispondente al tipo di evento che attiva le tue personalizzata. Consulta Trigger supportati in Cloud Functions (1ª generazione.) per informazioni su trigger e tipi di eventi supportati e dati sugli eventi associati formati.
Terminazione della funzione
Cloud Functions considera l'esecuzione di una funzione basata su eventi completata quando
restituite da una funzione. Se la funzione crea attività in background (come con
thread, future, oggetti JavaScript Promise
, callback o processi di sistema),
l'utente deve interrompere o risolvere in altro modo queste attività prima di tornare dal proprio
personalizzata. Le attività non terminate prima della restituzione della funzione potrebbero non essere
e potrebbe causare un comportamento indefinito.
Nuovi tentativi automatici
Le funzioni basate su eventi possono essere configurate in modo da eseguire automaticamente un nuovo tentativo non riuscito per le chiamate. Consulta Ripetere le funzioni basate su eventi per ulteriori informazioni.
Passaggi successivi
- Scopri di più sui trigger di Cloud Functions.
- Scopri come eseguire il deployment di una funzione Cloud Functions.
- Consulta i tutorial per esempi di diverse casi d'uso di Cloud Functions, inclusi esempi di funzioni basate su eventi.