Eine Pipeline verbindet einen Bus mit einem Ziel und leitet Ereignisnachrichten an dieses Ziel weiter. Sie können eine Pipeline so konfigurieren, dass Ereignisdaten in einem bestimmten Format erwartet werden. Außerdem können Sie Ereignisdaten von einem unterstützten Format in ein anderes konvertieren, bevor sie an ein Ziel gesendet werden. Möglicherweise müssen Sie Ereignisse an einen Endpunkt weiterleiten, der nur Avro-Daten akzeptiert.
Unterstützte Formate
Die folgenden Formatkonvertierungen werden unterstützt:
- Avro to JSON
- Avro zu Protobuf
- JSON zu Avro
- JSON zu Protobuf
- Protobuf zu Avro
- Protobuf to JSON
Wichtige Hinweise:
Wenn Sie das Format von Ereignissen konvertieren, wird nur die Ereignisnutzlast und nicht die gesamte Ereignisnachricht konvertiert.
Wenn für eine Pipeline ein eingehendes Datenformat angegeben ist, müssen alle Ereignisse diesem Format entsprechen. Alle Ereignisse, die nicht dem erwarteten Format entsprechen, werden als persistente Fehler behandelt.
Wenn für eine Pipeline kein eingehendes Datenformat angegeben ist, kann kein ausgehendes Format festgelegt werden.
Bevor ein Ereignisformat für ein bestimmtes Ziel konvertiert wird, werden alle konfigurierten Datentransformationen angewendet.
Ereignisse werden immer im CloudEvents-Format mit einer HTTP-Anfrage im Binärinhaltsmodus gesendet, sofern Sie keine Nachrichtenbindung angeben.
JSON-Schemas werden dynamisch erkannt. Für Protobuf-Schemadefinitionen können Sie nur einen Typ der obersten Ebene definieren. Importanweisungen, die auf andere Typen verweisen, werden nicht unterstützt. Bei Schemadefinitionen ohne
syntax-Kennung wird standardmäßigproto2verwendet. Beachten Sie, dass es ein Limit für die Schemagröße gibt.
Pipeline zum Formatieren von Ereignissen konfigurieren
Sie können eine Pipeline so konfigurieren, dass sie Ereignisdaten in einem bestimmten Format erwartet oder Ereignisdaten in der Google Cloud Console oder mit der gcloud CLI von einem Format in ein anderes konvertiert.
Console
Rufen Sie in der Google Cloud Console die Seite Eventarc > Pipelines auf.
Sie können eine Pipeline erstellen oder, wenn Sie eine Pipeline aktualisieren, auf den Namen der Pipeline klicken.
Klicken Sie auf der Seite Pipelinedetails auf Bearbeiten.
Führen Sie im Bereich Event-Vermittlung die folgenden Schritte aus:
- Klicken Sie das Kästchen Transformation anwenden an.
Wählen Sie in der Liste Eingangsformat das entsprechende Format aus.
Wenn für eine Pipeline ein eingehendes Datenformat angegeben ist, müssen alle Ereignisse diesem Format entsprechen. Alle Ereignisse, die nicht dem erwarteten Format entsprechen, werden als persistente Fehler behandelt.
Für Avro- oder Protobuf-Formate müssen Sie ein Eingangs-Schema angeben. Optional können Sie ein eingehendes Schema hochladen, anstatt es direkt anzugeben.
Geben Sie im Feld CEL-Ausdruck einen Transformationsausdruck mit CEL ein.
Klicken Sie auf Weiter.
Führen Sie im Bereich Ziel die folgenden Schritte aus:
Wählen Sie gegebenenfalls in der Liste Ausgehendes Format ein Format aus.
Wenn für eine Pipeline kein eingehendes Datenformat angegeben ist, kann auch kein ausgehendes Format festgelegt werden.
Optional: Wenden Sie eine Nachrichtenbindung an. Weitere Informationen finden Sie unter Nachrichtenbindung.
Klicken Sie auf Speichern.
Es kann einige Minuten dauern, bis eine Pipeline aktualisiert ist.
gcloud
Öffnen Sie ein Terminalfenster.
Sie können eine Pipeline erstellen oder eine Pipeline mit dem Befehl
gcloud eventarc pipelines updateaktualisieren:gcloud eventarc pipelines update PIPELINE_NAME \ --location=REGION \ --INPUT_PAYLOAD_FLAG \ --destinations=OUTPUT_PAYLOAD_KEY
Ersetzen Sie Folgendes:
PIPELINE_NAME: die ID der Pipeline oder ein voll qualifizierter NameREGION: ein unterstützter Eventarc Advanced-StandortAlternativ können Sie das Attribut für den Speicherort der gcloud CLI festlegen:
gcloud config set eventarc/location REGIONINPUT_PAYLOAD_FLAG: ein Flag für das Eingabedatenformat, das einen der folgenden Werte annehmen kann:--input-payload-format-avro-schema-definition--input-payload-format-json--input-payload-format-protobuf-schema-definition
Wenn ein Eingabedatenformat für eine Pipeline angegeben wird, müssen alle Ereignisse diesem Format entsprechen. Alle Ereignisse, die nicht dem erwarteten Format entsprechen, werden als persistente Fehler behandelt.
OUTPUT_PAYLOAD_KEY: Ein Schlüssel für das Ausgabedatenformat, der einer der folgenden Werte sein kann:output_payload_format_avro_schema_definitionoutput_payload_format_jsonoutput_payload_format_protobuf_schema_definition
Wenn Sie einen Schlüssel für das Ausgabedatenformat festlegen, müssen Sie auch ein Flag für das Eingabedatenformat angeben.
Es kann einige Minuten dauern, bis eine Pipeline aktualisiert ist.
Beispiele:
Im folgenden Beispiel wird das Flag
--input-payload-format-protobuf-schema-definitionverwendet, um anzugeben, dass die Pipeline Ereignisse in einem Protobuf-Datenformat mit einem bestimmten Schema erwarten soll:gcloud eventarc pipelines update my-pipeline \ --input-payload-format-protobuf-schema-definition \ ' syntax = "proto3"; message schema { string name = 1; string severity = 2; } '
Im folgenden Beispiel werden ein
output_payload_format_avro_schema_definition-Schlüssel und ein--input-payload-format-avro-schema-definition-Flag verwendet, um eine Pipeline zu erstellen, die Ereignisse im Avro-Format erwartet und sie im selben Format ausgibt:gcloud eventarc pipelines create my-pipeline \ --location=us-central1 \ --destinations=http_endpoint_uri='https://example-endpoint.com',output_payload_format_avro_schema_definition='{"type": "record", "name": "my_record", "fields": [{"name": "my_field", "type": "string"}]}' \ --input-payload-format-avro-schema-definition='{"type": "record", "name": "my_record", "fields": [{"name": "my_field", "type": "string"}]}'
Im folgenden Beispiel wird ein
output_payload_format_protobuf_schema_definition-Schlüssel und ein--input-payload-format-avro-schema-definition-Flag verwendet, um eine Pipeline zu aktualisieren und ihre Ereignisdaten mithilfe von Schemadefinitionen von Avro in Protobuf zu konvertieren:gcloud eventarc pipelines update my-pipeline \ --location=us-central1 \ --destinations=output_payload_format_protobuf_schema_definition='message MessageProto {string prop1 = 1; string prop2 = 2;}' \ --input-payload-format-avro-schema-definition= \ ' { "type": "record", "name": "MessageProto", "fields": [ { "name" : "prop1", "type": "string" }, { "name" : "prop2", "type": "string" }, ] } '