Ereignisgesteuerte Funktionen schreiben

In Cloud Run Functions verwenden Sie ereignisgesteuerte Funktionen, wenn eine Funktion automatisch als Reaktion auf ein Ereignis, das in Ihrer Cloudumgebung passiert, aufgerufen werden soll.

Es gibt zwei Möglichkeiten, ereignisgesteuerte Funktionen zu implementieren. Welche Methode Sie verwenden, hängt von der ausgewählten Sprachlaufzeit ab:

CloudEvent-Funktionen

CloudEvent-Funktionen basieren auf CloudEvents, einer branchenweit üblichen Spezifikation zum allgemeinen Beschreiben von Ereignisdaten. Weitere Informationen zur CloudEvents-Spezifikation finden Sie im GitHub-Repository von CloudEvents. Das CloudEvents-Projekt bietet auch eine Reihe von CloudEvents SDKs, die die Arbeit mit CloudEvents-Objekten in Ihrem Code erleichtern.

Das folgende Beispiel zeigt eine einfache Quelldatei der CloudEvent-Funktion für jede Laufzeit. Informationen zur Position Ihres Quellcodes finden Sie unter Quellverzeichnisstruktur.

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;
        }
    }
}

In .NET-Laufzeiten verwenden Sie dasFunctions Framework für .NET, um eine CloudEvent-Handler-Klasse mit der ICloudEventFunction<T>-Schnittstelle zu implementieren. Die HandleAsync()-Methode akzeptiert ein CloudEvent-Objekt und die zugehörige CloudEvent-Datennutzlast als Argumente.

Der Typ des CloudEvent-Datennutzlastarguments, der im obigen Beispiel als CloudEventDataType gezeigt wird, muss dem Typ des Ereignisses entsprechen, das von der Funktion verarbeitet wird. Die Google CloudEvents .NET-Bibliothek bietet Datentypen für die verschiedenen von Google unterstützten Ereignisse.

Der Funktionseinstiegspunkt ist der vollständig qualifizierte Name der CloudEvent-Handler-Klasse, einschließlich des Namespace. In diesem Beispiel ist der Einstiegspunkt 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 registrieren Sie eine CloudEvent-Handler-Funktion mit dem Functions Framework für Ruby. Ihre Handler-Funktion muss eine CloudEvents Event Objekt akzeptieren als Argument.

Der Funktionseinstiegspunkt ist der Name, mit dem der Handler beim Functions Framework registriert ist. In diesem Beispiel ist der Einstiegspunkt 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 registrieren Sie eine CloudEvent-Handler-Funktion mit dem Functions Framework für PHP. Ihre Handlerfunktion muss ein Argument akzeptieren, das der Schnittstelle CloudEventInterface entspricht.

Der Funktionseinstiegspunkt ist der Name, mit dem der Handler beim Functions Framework registriert ist. In diesem Beispiel ist der Einstiegspunkt myCloudEventFunction.

Bei CloudEvent-Funktionen werden Ereignisdaten im CloudEvents-Format an Ihre Funktion übergeben, wobei eine CloudEvent-Datennutzlast dem Ereignistyp entspricht, der Ihre Funktion auslöst. Informationen zu unterstützten Triggern, Ereignistypen und zugehörigen Ereignisdatenformaten finden Sie unter Trigger für Cloud Run-Funktionen.

Das Repository Google Events enthält Ressourcen für die Arbeit mit von Google herausgegebenen CloudEvents.

Hintergrundfunktionen

Ereignisgesteuerte Funktionen in den Node.js-, Python-, Go- und Java-Laufzeiten erwarten unterschiedliche Argumente von CloudEvent-Funktionen. Diese ältere Art ereignisgesteuerter Funktionen wird als Hintergrundfunktion bezeichnet.

Das folgende Beispiel zeigt eine einfache Quelldatei der Hintergrundfunktion für jede Laufzeit. Informationen zur Position Ihres Quellcodes finden Sie unter Quellverzeichnisstruktur.

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 definieren und exportieren Sie eine Funktion, die Ereignisdaten verarbeitet. Cloud Run-Funktionen übergeben Ihrer Handlerfunktion die folgenden Argumente:

  • eventData: Ein Objekt, das die Nutzlast der Ereignisdaten darstellt. Das Format hängt vom Ereignistyp ab.
  • context: Ein Objekt mit Metadaten zum Ereignis.
  • callback: Optionale Funktion, die Sie aufrufen können, um den Abschluss zu signalisieren. Das erste Argument dieses Callbacks wird als Fehlersignal interpretiert. Übergeben Sie keine Argumente oder ein null als erstes Argument, um den Erfolg zu signalisieren.

Der Funktionseinstiegspunkt ist der Name des exportierten Ereignis-Handlers. In diesem Beispiel ist der Einstiegspunkt 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 definieren Sie eine Funktion, die Ereignisdaten verarbeitet. Cloud Run-Funktionen übergeben Ihrer Handlerfunktion die folgenden Argumente:

  • event_data: Ein Dictionary, das die Nutzlast der Ereignisdaten darstellt. Das Format hängt vom Ereignistyp ab.
  • context: Ein Objekt mit Metadaten zum Ereignis.

Der Funktionseinstiegspunkt ist der Name der Handlerfunktion. In diesem Beispiel ist der Einstiegspunkt my_background_function.

Go

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 definieren Sie eine exportierte Funktion, die Ereignisdaten verarbeitet. Cloud Run-Funktionen übergeben Ihrer Handlerfunktion die folgenden Argumente:

  • ctx: Ein context.Context-Objekt mit Metadaten zum Ereignis. Sie können die Metadaten mit dem cloud.google.com/go/functions/metadata-Paket abrufen.
  • e: Ein Objekt, das die Nutzlast der Ereignisdaten darstellt. Der Typ, der im obigen Beispiel als EventDataType gezeigt wird, muss eine Struktur sein, die dem Typ des Ereignisses entspricht, das von der Funktion verarbeitet wird. Die Ereignisdatennutzlast wird mithilfe von json.Unmarshal() in die Struktur übergeben.

Der Funktionseinstiegspunkt ist der Name des exportierten Ereignis-Handlers. In diesem Beispiel ist der Einstiegspunkt 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 verwenden Sie die Functions Framework Java API, um eine Event-Handler-Klasse mit der Schnittstelle BackgroundFunction<T> zu implementieren. Die accept()-Methode akzeptiert als Argumente die Nutzlast der Ereignisdaten und ein Context-Objekt mit Metadaten zum Ereignis.

Der Typ des Ereignisdatennutzlastarguments, der im obigen Beispiel als EventDataType gezeigt wird, muss dem Typ des Ereignisses entsprechen, das von der Funktion verarbeitet wird. Die Ereignisdatennutzlast wird mithilfe von Gson.fromJson() in eine Instanz dieser Klasse deserialisiert.

Der Funktionseinstiegspunkt ist der voll qualifizierte Name der Ereignis-Handler-Klasse, einschließlich des Paketnamens. In diesem Beispiel ist der Einstiegspunkt mybackgroundfunction.MyBackgroundFunction.

Bei Hintergrundfunktionen wird die Nutzlast der Ereignisdaten direkt in einem Format an Ihre Funktion übergeben, das dem Ereignistyp entspricht, der Ihre Funktion auslöst. Informationen zu unterstützten Triggern, Ereignistypen und zugehörigen Ereignisdatenformaten finden Sie unter In Cloud Run Functions (1st gen) unterstützte Trigger.

Funktion beendet

Cloud Run Functions betrachtet die ereignisgesteuerte Funktionsausführung als abgeschlossen, wenn die Funktion dies zurückgibt. Wenn die Funktion Hintergrundaufgaben erstellt (z. B. mit Threads, Futures, JavaScript-Promise-Objekten, -Callbacks oder Systemprozessen), müssen Sie diese Aufgaben beenden oder anderweitig auflösen bevor Sie von Ihrer Funktion zurückgeben. Alle Aufgaben, die vor dem Zurückgeben durch die Funktion nicht beendet wurden, sind möglicherweise nicht abgeschlossen und können ein nicht definiertes Verhalten verursachen.

Automatische Wiederholungsversuche

Ereignisgesteuerte Funktionen können so konfiguriert werden, dass fehlgeschlagene Aufrufe automatisch wiederholt werden. Weitere Informationen finden Sie unter Ereignisgesteuerte Funktionen wiederholen.

Weitere Informationen