Un pipeline connecte un bus à une destination cible et achemine les messages d'événement vers cette destination. Vous pouvez configurer un pipeline pour qu'il s'attende à des données d'événement dans un format spécifique. Vous pouvez également convertir les données d'événement d'un format compatible à un autre avant que les événements ne soient distribués à une destination. Par exemple, vous devrez peut-être acheminer des événements vers un point de terminaison qui n'accepte que des données Avro.
Formats compatibles
Les conversions entre les formats suivants sont possibles:
- Avro vers JSON
- Avro vers Protobuf
- JSON vers Avro
- JSON vers Protobuf
- Protobuf vers Avro
- Protobuf vers JSON
Veuillez noter les points suivants :
Lorsque vous convertissez le format des événements, seule la charge utile de l'événement est convertie, et non l'intégralité du message de l'événement.
Si un format de données entrantes est spécifié pour un pipeline, tous les événements doivent correspondre à ce format. Tous les événements qui ne correspondent pas au format attendu sont traités comme des erreurs persistantes.
Si un format de données entrantes n'est pas spécifié pour un pipeline, un format sortant ne peut pas être défini.
Avant qu'un format d'événement ne soit converti pour une destination spécifique, toute transformation de données configurée est appliquée en premier.
Les événements sont toujours envoyés au format CloudEvents à l'aide d'une requête HTTP en mode "contenu binaire", sauf si vous spécifiez une liaison de message.
Les schémas JSON sont détectés de manière dynamique. Pour les définitions de schéma Protobuf, vous ne pouvez définir qu'un seul type de premier niveau, et les instructions d'importation qui font référence à d'autres types ne sont pas acceptées. Les définitions de schéma sans identifiant
syntax
sont définies par défaut surproto2
. Notez qu'il existe une limite de taille de schéma.
Configurer un pipeline pour mettre en forme des événements
Vous pouvez configurer un pipeline pour qu'il attende des données d'événement dans un format spécifique ou pour qu'il convertisse des données d'événement d'un format à un autre, dans la console Google Cloud ou à l'aide de la gcloud CLI.
Console
Dans la console Google Cloud, accédez à la page Eventarc > Pipelines.
Vous pouvez créer un pipeline ou, si vous mettez à jour un pipeline, cliquer sur son nom.
Notez que la mise à jour d'un pipeline peut prendre plus de 10 minutes.
Sur la page Détails du pipeline, cliquez sur
Modifier.Dans le volet Médiation des événements, procédez comme suit:
- Cochez la case Appliquer une transformation.
Dans la liste Format entrant, sélectionnez le format applicable.
Notez que si un format de données entrantes est spécifié pour un pipeline, tous les événements doivent correspondre à ce format. Tous les événements qui ne correspondent pas au format attendu sont traités comme des erreurs persistantes.
Pour les formats Avro ou Protobuf, vous devez spécifier un schéma d'entrée. (Si vous le souhaitez, au lieu de le spécifier directement, vous pouvez importer un schéma entrant.)
Dans le champ Expression CEL, écrivez une expression de transformation à l'aide du CEL.
Cliquez sur Continuer.
Dans le volet Destination, procédez comme suit:
Le cas échéant, sélectionnez un format dans la liste Format sortant.
Notez que si un format de données entrantes n'est pas spécifié pour un pipeline, vous ne pouvez pas définir de format sortant.
Facultatif: Appliquez une liaison de message. Pour en savoir plus, consultez la section Liaison de messages.
Cliquez sur Enregistrer.
gcloud
Ouvrez un terminal.
Vous pouvez créer un pipeline ou le mettre à jour à l'aide de la commande
gcloud beta eventarc pipelines update
:Notez que la mise à jour d'un pipeline peut prendre plus de 10 minutes.
gcloud beta eventarc pipelines update PIPELINE_NAME \ --location=REGION \ --INPUT_PAYLOAD_FLAG \ --destinations=OUTPUT_PAYLOAD_KEY
Remplacez les éléments suivants :
PIPELINE_NAME
: ID du pipeline ou nom completREGION
: un emplacement Eventarc Advanced compatibleVous pouvez également définir la propriété d'emplacement de gcloud CLI:
gcloud config set eventarc/location REGION
INPUT_PAYLOAD_FLAG
: indicateur de format de données d'entrée, qui peut être l'un des suivants:--input-payload-format-avro-schema-definition
--input-payload-format-json
--input-payload-format-protobuf-schema-definition
Notez que si un format de données d'entrée est spécifié pour un pipeline, tous les événements doivent correspondre à ce format. Tous les événements qui ne correspondent pas au format attendu sont traités comme des erreurs persistantes.
OUTPUT_PAYLOAD_KEY
: clé de format de données de sortie, qui peut être l'une des suivantes:output_payload_format_avro_schema_definition
output_payload_format_json
output_payload_format_protobuf_schema_definition
Notez que si vous définissez une clé de format de données de sortie, vous devez également spécifier un indicateur de format de données d'entrée.
Exemples :
L'exemple suivant utilise un indicateur
--input-payload-format-protobuf-schema-definition
pour spécifier que le pipeline doit s'attendre à des événements dans un format de données Protobuf avec un schéma spécifique:gcloud beta eventarc pipelines update my-pipeline \ --input-payload-format-protobuf-schema-definition \ ' syntax = "proto3"; message schema { string name = 1; string severity = 2; } '
L'exemple suivant utilise une clé
output_payload_format_avro_schema_definition
et un indicateur--input-payload-format-avro-schema-definition
pour créer un pipeline qui attend des événements au format Avro et les génère au même format:gcloud beta 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"}]}'
L'exemple suivant utilise une clé
output_payload_format_protobuf_schema_definition
et un indicateur--input-payload-format-avro-schema-definition
pour mettre à jour un pipeline et convertir ses données d'événements d'Avro en Protobuf à l'aide de définitions de schéma:gcloud beta 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" }, ] } '