Scrivere funzioni basate su eventi
Nelle funzioni di Cloud Run, utilizzi le funzioni basate su eventi quando vuoi una funzione da richiamare automaticamente in risposta a un evento che si verifica nel tuo completamente gestito di Google Cloud.
Funzioni CloudEvent
Puoi usare le funzioni CloudEvent per richiamare la tua funzione.
Le funzioni 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.
Node.js
const functions = require('@google-cloud/functions-framework');
// Register a CloudEvent function with the Functions Framework
functions.cloudEvent('myCloudEventFunction', cloudEvent => {
// Your code here
// Access the CloudEvent data payload via cloudEvent.data
});
In Node.js, registri una funzione di gestore CloudEvent con la funzione
Framework di funzioni per Node.js.
La tua funzione gestore deve accettare un
CloudEvent
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 è myCloudEventFunction
.
Python
import functions_framework
# Register a CloudEvent function with the Functions Framework
@functions_framework.cloud_event
def my_cloudevent_function(cloud_event):
# Your code here
# Access the CloudEvent data payload via cloud_event.data
In Python, registri una funzione di gestore CloudEvent con il
Framework delle funzioni per Python.
La tua funzione gestore deve accettare un
CloudEvent
come argomento.
La
punto di accesso alla funzione
è il nome della funzione gestore registrata nel framework di Functions.
In questo esempio, il punto di ingresso è my_cloudevent_function
.
Vai
package mycloudeventfunction
import (
"context"
"github.com/GoogleCloudPlatform/functions-framework-go/functions"
"github.com/cloudevents/sdk-go/v2/event"
)
func init() {
// Register a CloudEvent function with the Functions Framework
functions.CloudEvent("MyCloudEventFunction", myCloudEventFunction)
}
// Function myCloudEventFunction accepts and handles a CloudEvent object
func myCloudEventFunction(ctx context.Context, e event.Event) error {
// Your code here
// Access the CloudEvent data payload via e.Data() or e.DataAs(...)
// Returning an error causes its message to be logged.
// Example:
err := myInternalFunction() // may return an error
if err != nil {
// Append error message to log
return err
}
// Return nil if no error occurred
return nil
}
In Go, registri una funzione di gestore CloudEvent con la funzione
Framework delle funzioni per Go.
La tua funzione di gestore deve accettare un evento CloudEvents
event.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 è MyCloudEventFunction
.
Java
package mycloudeventfunction;
import com.google.cloud.functions.CloudEventsFunction;
import io.cloudevents.CloudEvent;
// Define a class that implements the CloudEventsFunction interface
public class MyCloudEventFunction implements CloudEventsFunction {
// Implement the accept() method to handle CloudEvents
@Override
public void accept(CloudEvent event) {
// Your code here
// Access the CloudEvent data payload via event.getData()
// To get the data payload as a JSON string, use:
// new String(event.getData().toBytes())
}
}
In Java, utilizzi
API Java del framework Functions
per implementare una classe di gestore CloudEvent con
CloudEventsFunction
:
a riga di comando. Il metodo accept()
deve accettare un
CloudEvent
come argomento ed eseguire qualsiasi elaborazione sull'evento.
La
punto di accesso alla funzione
è il nome completo della classe di gestori CloudEvent, che include
il nome del pacchetto. In questo esempio, il punto di ingresso
mycloudeventfunction.MyCloudEventFunction
.
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 delle funzioni di Cloud Run per informazioni su trigger, tipi di eventi e dati di eventi associati supportati formati.
La Google Eventi il repository contiene risorse per lavorare con gli eventi CloudEvents forniti da Google.
Terminazione della funzione
Cloud Run considera l'esecuzione di una funzione basata su eventi completata quando
restituisce una funzione. Se la funzione crea attività in background (ad esempio,
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 funzioni Cloud Run.
- Scopri come eseguire il deployment di una funzione Cloud Run.
- Consulta i tutorial per esempi di diverse Casi d'uso delle funzioni di Cloud Run, inclusi esempi di funzioni basate su eventi.