In Cloud Run schreiben Sie eine CloudEvents-Funktion (auch ereignisgesteuerte Funktion genannt), wenn eine Funktion direkt als Reaktion auf Ereignisse in Ihrem Google Cloud-Projekt ausgelöst werden soll, z. B. Nachrichten in einem Pub/Sub-Thema oder Änderungen in einem Cloud Storage-Bucket.
CloudEvents-Handlerfunktionen implementieren
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.
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 using cloudEvent.data
});
In Node.js registrieren Sie eine CloudEvent-Handler-Funktion mit dem Functions Framework für Node.js.
Ihre Handlerfunktion muss ein CloudEvent
-Objekt als Argument akzeptieren.
Der Funktionseinstiegspunkt ist der Name, mit dem der Handler beim Functions Framework registriert ist.
In diesem Beispiel ist der Einstiegspunkt 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 registrieren Sie eine CloudEvent-Handler-Funktion mit dem Functions Framework für Python.
Ihre Handlerfunktion muss ein CloudEvent
-Objekt als Argument akzeptieren.
Der Funktionseinstiegspunkt ist der Name der Handler-Funktion, die bei Functions Framework registriert ist.
In diesem Beispiel ist der Einstiegspunkt my_cloudevent_function
.
Go
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 using 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 registrieren Sie eine CloudEvent-Handler-Funktion mit dem Functions Framework für Go. Ihre Handler-Funktion muss eine CloudEvents event.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 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 using event.getData()
// To get the data payload as a JSON string, use:
// new String(event.getData().toBytes())
}
}
In Java verwenden Sie die Functions Framework Java API, um eine CloudEvent-Handler-Klasse mit der Schnittstelle CloudEventsFunction
zu implementieren. Die Methode accept()
muss ein CloudEvent
-Objekt als Argument akzeptieren und alle Verarbeitungen für das Ereignis ausführen.
Der Funktionseinstiegspunkt ist der voll qualifizierte Name der CloudEvent-Handler-Klasse, einschließlich des Paketnamens. In diesem Beispiel ist der Einstiegspunkt mycloudeventfunction.MyCloudEventFunction
.
.NET
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 So implementieren Sie eine CloudEvent-Handler-Klasse mit der ICloudEventFunction<T>
-Schnittstelle. Die HandleAsync()
-Methode akzeptiert ein CloudEvent
-Objekt und die zugehörige CloudEvent-Datennutzlast als Argumente.
Der Typ des CloudEvent-Datennutzlastarguments, der im Beispielcode 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 using $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 Funktionstrigger.
Das Repository Google Events enthält Ressourcen für die Arbeit mit CloudEvents, die herausgegeben von Google.
Funktion beendet
Cloud Run betrachtet die ereignisgesteuerte Funktionsausführung als abgeschlossen, wenn die Funktion 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 der Funktion zurückkehren. 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.