Scrivere funzioni basate sugli 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

Utilizza le funzioni CloudEvent per invocare la tua funzione.

Le funzioni CloudEvent si basano su CloudEvents, uno standard di settore per descrivere i dati sugli eventi in modo comune. Per saperne di più sulla specifica CloudEvents, visita il repository GitHub di CloudEvents. Il progetto CloudEvents fornisce anche un insieme di SDK CloudEvents per aiutarti a utilizzare gli oggetti CloudEvents nel codice.

L'esempio seguente mostra un file di origine della funzione CloudEvent di base per ogni ambiente di esecuzione. Consulta la sezione 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.

Il punto di ingresso della funzione è il nome con cui il gestore è registrato nel Functions Framework. 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 di CloudEvent con il Functions Framework per Python. La funzione del gestore deve accettare un oggetto 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.

Il punto di ingresso della funzione è il nome con cui il gestore è registrato nel Functions Framework. 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 oggetto CloudEvent come argomento ed eseguire qualsiasi elaborazione sull'evento.

Il punto di ingresso della funzione è il nome completo della classe di gestore degli eventi Cloud, incluso 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 il Functions Framework per .NET per implementare una classe di gestore CloudEvent con l'interfaccia ICloudEventFunction<T> . Il metodo HandleAsync() accetta come argomenti un oggetto CloudEvent e il payload dei dati CloudEvent associato.

Il tipo dell'argomento del payload dei dati CloudEvent, indicato nell'esempio precedente come CloudEventDataType, deve corrispondere al tipo di evento gestito dalla funzione. La libreria .NET 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 di CloudEvent con il Functions Framework per Ruby. La tua funzione di gestore deve accettare un evento CloudEvents Event come argomento.

Il punto di ingresso della funzione è il nome con cui il gestore è registrato nel Functions Framework. 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 funzione del gestore deve accettare un argomento conforme all'interfaccia CloudEventInterface.

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 sugli 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 Cloud Run per informazioni su trigger, tipi di eventi e formati dei dati sugli eventi supportati.

Il repository Google Events contiene risorse per lavorare con CloudEvents emessi da Google.

Terminazione della funzione

Cloud Run considera l'esecuzione di funzioni basate 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