Formater les événements reçus

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 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 de les distribuer à une destination. Par exemple, vous devrez peut-être acheminer des événements vers un point de terminaison qui n'accepte que les 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'ensemble du message d'é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 aucun format de données entrantes n'est spécifié pour un pipeline, aucun format de données sortantes ne peut ê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. 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 sur proto2. Notez qu'il existe une limite de taille pour le schéma.

Configurer un pipeline pour mettre en forme les é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 les données d'événement d'un format à un autre dans la console Google Cloud ou à l'aide de la gcloud CLI.

Console

  1. Dans la console Google Cloud , accédez à la page Eventarc > Pipelines.

    Accéder à la page Pipelines

  2. Vous pouvez créer un pipeline ou, si vous mettez à jour un pipeline, cliquez sur son nom.

    Notez que la mise à jour d'un pipeline peut prendre plus de 10 minutes.

  3. Sur la page Détails du pipeline, cliquez sur Modifier.

  4. Dans le volet Médiation d'événements, procédez comme suit :

    1. Cochez la case Appliquer une transformation.
    2. Dans la liste Format d'entrée, 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.

    3. Pour les formats Avro ou Protobuf, vous devez spécifier un schéma d'entrée. (Vous pouvez également importer un schéma d'entrée au lieu de le spécifier directement.)

    4. Dans le champ Expression CEL, écrivez une expression de transformation en CEL.

    5. Cliquez sur Continuer.

  5. Dans le volet Destination, procédez comme suit :

    1. Le cas échéant, sélectionnez un format dans la liste Format de sortie.

      Notez que si un format de données entrantes n'est pas spécifié pour un pipeline, un format sortant ne peut pas être défini.

    2. Facultatif : Appliquez une liaison de message. Pour en savoir plus, consultez Liaison de messages.

  6. Cliquez sur Enregistrer.

gcloud

  1. Ouvrez un terminal.

  2. 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 complet
    • REGION : un emplacement Eventarc Advanced compatible

      Vous 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 au 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 dans le 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énement 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" },
          ]
        }
        '