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 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 sur proto2. 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

  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, cliquer 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 des événements, procédez comme suit:

    1. Cochez la case Appliquer une transformation.
    2. 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.

    3. 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.)

    4. Dans le champ Expression CEL, écrivez une expression de transformation à l'aide du 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 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.

    2. Facultatif: Appliquez une liaison de message. Pour en savoir plus, consultez la section 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 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" },
          ]
        }
        '