CloudEvent-Funktionen

Eine CloudEvent-Funktion ist eine Art von ereignisgesteuerter Funktion. CloudEvent-Funktionen werden indirekt als Reaktion auf Ereignisse wie eine Nachricht in einem Pub/Sub-Thema, eine Änderung in einem Cloud Storage-Bucket oder ein Firebase-Ereignis aufgerufen.

CloudEvent-Funktionen sind konzeptionell ähnlich wie Hintergrundfunktionen. Die zwei Funktionen unterscheiden sich hauptsächlich darin, dass CloudEvent-Funktionen ein Ereignisformat nach Branchenstandard verwenden, das als CloudEvents bezeichnet wird. Ein weiterer Unterschied besteht darin, dass Cloud Functions selbst CloudEvent-Funktionen über HTTP-Anfragen aufruft, die an anderer Stelle reproduziert werden können. Insgesamt bewirken diese Unterschiede, dass CloudEvent-Funktionen nahtlos zwischen Computing-Plattformen verschoben werden können.

Unterstützende Laufzeiten

Die folgenden Laufzeiten unterstützen CloudEvent-Funktionen:

Sprache Version(en)
C# Beta Alle
Ruby Beta Alle

Funktionsparameter

An CloudEvent-Funktionen wird ein einzelnes cloudEvent-Argument übergeben, das Attribute und Metadaten zu dem Ereignis enthält, das die Ausführung der Funktion ausgelöst hat. Eingehende CloudEvents werden dann mithilfe der Functions Framework-Bibliotheken in die unten gezeigten sprachspezifischen Darstellungen umgewandelt.

C#

Der Parameter cloudEvent wird als CloudEvent-Objekt an die Funktion übergeben. Dieses Objekt enthält die folgenden Attribute:

Attribut Typ Beschreibung
cloudEvent.Id String Die eindeutige ID des Ereignisses.
cloudEvent.Source uri Die Google Cloud-Entität, die vom Ereignis betroffen ist, im Format /[SERVICE_DOMAIN_NAME]/[RESOURCE]/.
cloudEvent.Type String Der CloudEvent-Typ des empfangenen Ereignisses.
cloudEvent.Time DateTime Ein Zeitstempel, der angibt, wann das Ereignis aufgetreten ist.
cloudEvent.SpecVersion CloudEventsSpecVersion Die CloudEvents-Spezifikationsversion, die zum Erstellen des Ereignisses verwendet wurde.
cloudEvent.data Object Ein object mit spezifischen Daten gemäß Ereignistyp.
cloudEvent.subject Nullable String (Nullwerte zulässig) Wenn das zugrunde liegende Ereignis auf ein Cloud Storage-Objekt verweist, wird dieses Attribut auf den Speicherort des Objekts im Format objects/path/to/object festgelegt. Wenn das zugrunde liegende Ereignis nicht auf ein solches Objekt verweist, ist dieses Attribut null.

Ruby

Der Parameter cloudEvent wird als CloudEvents::Event::V1-Objekt an die Funktion übergeben. Dieses Objekt enthält die folgenden Attribute:

Attribut Typ Beschreibung
cloudEvent.id String Die eindeutige ID des Ereignisses.
cloudEvent.source URI Die Google Cloud-Entität, die vom Ereignis betroffen ist, im Format /[SERVICE_DOMAIN_NAME]/[RESOURCE]/.
cloudEvent.type String Der CloudEvent-Typ des empfangenen Ereignisses.
cloudEvent.time DateTime Ein Zeitstempel, der angibt, wann das Ereignis aufgetreten ist.
cloudEvent.specversion String Die CloudEvents-Spezifikationsversion, die zum Erstellen des Ereignisses verwendet wurde.
cloudEvent.data Hash Ein Hash mit spezifischen Daten gemäß Ereignistyp.
cloudEvent.subject String oder Nil Wenn das zugrunde liegende Ereignis auf ein Cloud Storage-Objekt verweist, wird dieses Attribut auf den Speicherort des Objekts im Format objects/path/to/object festgelegt. Wenn das zugrunde liegende Ereignis nicht auf ein solches Objekt verweist, ist dieses Attribut Nil. Cloud Storage-Ereignisse

Verwendungsbeispiel

Die folgenden Beispiele zeigen, wie Ereignisse aus Pub/Sub und Cloud Storage verarbeitet werden. Weitere Informationen zur Verarbeitung von Ereignissen aus verschiedenen Quellen finden Sie unter Cloud Functions aufrufen.

Pub/Sub-Beispiel

Dieses Beispiel zeigt eine CloudEvent-Funktion, die durch Pub/Sub-Ereignisse ausgelöst wird. Jedes Mal, wenn eine Nachricht in einem Pub/Sub-Thema veröffentlicht wird, wird die Funktion aufgerufen, und eine Begrüßung mit Daten aus der Nachricht wird in das Log geschrieben.

C#

using CloudNative.CloudEvents;
using Google.Cloud.Functions.Framework;
using Google.Events.Protobuf.Cloud.PubSub.V1;
using Microsoft.Extensions.Logging;
using System.Threading;
using System.Threading.Tasks;

namespace HelloPubSub
{
    public class Function : ICloudEventFunction<MessagePublishedData>
    {
        private readonly ILogger _logger;

        public Function(ILogger<Function> logger) =>
            _logger = logger;

        public Task HandleAsync(CloudEvent cloudEvent, MessagePublishedData data, CancellationToken cancellationToken)
        {
            string nameFromMessage = data.Message?.TextData;
            string name = string.IsNullOrEmpty(nameFromMessage) ? "world" : nameFromMessage;
            _logger.LogInformation("Hello {name}", name);
            return Task.CompletedTask;
        }
    }
}

Ruby

require "functions_framework"
require "base64"

FunctionsFramework.cloud_event "hello_pubsub" do |event|
  # The event parameter is a CloudEvents::Event::V1 object.
  # See https://cloudevents.github.io/sdk-ruby/latest/CloudEvents/Event/V1.html
  name = Base64.decode64 event.data["message"]["data"] rescue "World"

  # A cloud_event function does not return a response, but you can log messages
  # or cause side effects such as sending additional events.
  logger.info "Hello, #{name}!"
end

Weitere Informationen zur Bereitstellung von Cloud Functions-Funktionen, die von Pub/Sub-Ereignissen ausgelöst werden, finden Sie unter Cloud Pub/Sub-Trigger und Anleitung zu Pub/Sub.

Beispiel für Cloud Storage

Dieses Beispiel zeigt eine CloudEvent-Funktion, die durch Cloud Storage-Ereignisse ausgelöst wird. Die Funktion wird jedes Mal aufgerufen, wenn in einem Cloud Storage-Bucket ein Objekt erstellt wird. Die Änderung wird mit einer Nachricht im Log protokolliert.

C#

using CloudNative.CloudEvents;
using Google.Cloud.Functions.Framework;
using Google.Events.Protobuf.Cloud.Storage.V1;
using Microsoft.Extensions.Logging;
using System.Threading;
using System.Threading.Tasks;

namespace HelloGcs
{
    public class Function : ICloudEventFunction<StorageObjectData>
    {
        private readonly ILogger _logger;

        public Function(ILogger<Function> logger) =>
            _logger = logger;

        public Task HandleAsync(CloudEvent cloudEvent, StorageObjectData data, CancellationToken cancellationToken)
        {
            _logger.LogInformation("Event: {event}", cloudEvent.Id);
            _logger.LogInformation("Event Type: {type}", cloudEvent.Type);
            _logger.LogInformation("Bucket: {bucket}", data.Bucket);
            _logger.LogInformation("File: {file}", data.Name);
            _logger.LogInformation("Metageneration: {metageneration}", data.Metageneration);
            _logger.LogInformation("Created: {created:s}", data.TimeCreated?.ToDateTimeOffset());
            _logger.LogInformation("Updated: {updated:s}", data.Updated?.ToDateTimeOffset());
            return Task.CompletedTask;
        }
    }
}

Ruby

require "functions_framework"

FunctionsFramework.cloud_event "hello_gcs" do |event|
  # The event parameter is a CloudEvents::Event::V1 object.
  # See https://cloudevents.github.io/sdk-ruby/latest/CloudEvents/Event/V1.html
  payload = event.data

  logger.info "Event: #{event.id}"
  logger.info "Event Type: #{event.type}"
  logger.info "Bucket: #{payload['bucket']}"
  logger.info "File: #{payload['name']}"
  logger.info "Metageneration: #{payload['metageneration']}"
  logger.info "Created: #{payload['timeCreated']}"
  logger.info "Updated: #{payload['updated']}"
end

Weitere Informationen zum Bereitstellen von CloudEvent-Funktionen, die durch Cloud Storage-Ereignisse ausgelöst werden, finden Sie unter Cloud Storage-Trigger und in der Cloud Storage-Anleitung.

Tipps und Tricks

Ereignis-Logging

Ereignisinhalte werden nicht automatisch protokolliert, da sie vertrauliche Informationen enthalten können. Wenn Sie Ereignisinhalte protokollieren möchten, müssen Sie dies explizit wie in Logs schreiben, aufrufen und darauf reagieren beschrieben veranlassen.

CloudEvent-Funktionen beenden

Wenn eine CloudEvent-Funktion Hintergrundaufgaben erstellt, müssen diese Aufgaben ausführt werden, bevor Sie aus der Funktion zurückkehren. So können Sie Fehler und/oder nicht definiertes Verhalten vermeiden.

Automatische Wiederholungsversuche

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

Weitere Informationen