Formatar eventos recebidos

Um pipeline conecta um barramento a um destino e encaminha mensagens de eventos para esse destino. É possível configurar um pipeline para esperar dados de eventos em um formato específico ou, antes que os eventos sejam entregues a um destino, converter os dados de eventos de um formato compatível para outro. Por exemplo, talvez seja necessário encaminhar eventos para um endpoint que só aceite dados Avro.

Formatos compatíveis

As conversões de formato a seguir são compatíveis:

  • Avro para JSON
  • Avro para Protobuf
  • JSON para Avro
  • JSON para Protobuf
  • Protobuf para Avro
  • Protobuf para JSON

Observe o seguinte:

  • Ao converter o formato de eventos, apenas o payload do evento é convertido, e não a mensagem de evento inteira.

  • Se um formato de dados de entrada for especificado para um pipeline, todos os eventos precisarão corresponder a esse formato. Todos os eventos que não corresponderem ao formato esperado serão tratados como erros persistentes.

  • Se um formato de dados de entrada não for especificado para um pipeline, um formato de saída não poderá ser definido.

  • Antes que um formato de evento seja convertido para um destino específico, qualquer transformação de dados configurada será aplicada primeiro.

  • Os eventos são sempre entregues em um formato CloudEvents usando uma solicitação HTTP no modo de conteúdo binário , a menos que você especifique uma vinculação de mensagem.

  • Os esquemas JSON são detectados dinamicamente. Para definições de esquema do Protobuf, é possível definir apenas um tipo de nível superior, e as instruções de importação que se referem a outros tipos não são compatíveis. As definições de esquema sem um identificador syntax são definidas como proto2 por padrão. Observe que há um limite de tamanho do esquema.

Configurar um pipeline para formatar eventos

É possível configurar um pipeline para esperar dados de eventos em um formato específico ou para converter dados de eventos de um formato para outro, no Google Cloud console ou usando a CLI gcloud.

Console

  1. Noconsole, acesse a página Eventarc > Pipelines. Google Cloud

    Acessar "Pipelines"

  2. É possível criar um pipeline ou, se você estiver atualizando um, clique no nome dele.

  3. Na página Detalhes do pipeline, clique em Editar.

  4. No painel Mediação de eventos, faça o seguinte:

    1. Marque a caixa de seleção Aplicar uma transformação.
    2. Na lista Formato de entrada, selecione o formato aplicável.

      Observação: se um formato de dados de entrada for especificado para um pipeline, todos os eventos precisarão corresponder a esse formato. Todos os eventos que não corresponderem ao formato esperado serão tratados como erros persistentes.

    3. Para formatos Avro ou Protobuf, é necessário especificar um esquema de entrada. Como alternativa, em vez de especificar diretamente, é possível fazer upload de um esquema de entrada.

    4. No campo Expressão CEL, escreva uma expressão de transformação usando CEL.

    5. Clique em Continuar.

  5. No painel Destino, faça o seguinte:

    1. Se aplicável, na lista Formato de saída, selecione um formato.

      Se um formato de dados de entrada não for especificado para um pipeline, um formato de dados de saída não poderá ser definido.

    2. Opcional: aplique uma vinculação de mensagem. Para mais informações, consulte Vinculação de mensagens.

  6. Clique em Salvar.

    Pode levar alguns minutos para atualizar um pipeline.

gcloud

  1. Abra um terminal.

  2. É possível criar um pipeline ou atualizar um usando o gcloud eventarc pipelines update comando:

    gcloud eventarc pipelines update PIPELINE_NAME \
        --location=REGION \
        --INPUT_PAYLOAD_FLAG \
        --destinations=OUTPUT_PAYLOAD_KEY

    Substitua:

    • PIPELINE_NAME: o ID do pipeline ou um nome totalmente qualificado
    • REGION: um local compatível do Eventarc Advanced

      Como alternativa, é possível definir a propriedade de local da CLI gcloud:

      gcloud config set eventarc/location REGION
      
    • INPUT_PAYLOAD_FLAG: um flag de formato de dados de entrada que pode ser um dos seguintes:

      • --input-payload-format-avro-schema-definition
      • --input-payload-format-json
      • --input-payload-format-protobuf-schema-definition

      Observação: se um formato de dados de entrada for especificado para um pipeline, todos os eventos precisarão corresponder a esse formato. Todos os eventos que não corresponderem ao formato esperado serão tratados como erros persistentes.

    • OUTPUT_PAYLOAD_KEY: uma chave de formato de dados de saída que pode ser uma das seguintes:

      • output_payload_format_avro_schema_definition
      • output_payload_format_json
      • output_payload_format_protobuf_schema_definition

      Observe que, se você definir uma chave de formato de dados de saída, também será necessário especificar um flag de formato de dados de entrada.

    Pode levar alguns minutos para atualizar um pipeline.

    Exemplos:

    O exemplo a seguir usa um flag --input-payload-format-protobuf-schema-definition para especificar que o pipeline espera eventos em um formato de dados Protobuf com um esquema específico:

    gcloud eventarc pipelines update my-pipeline \
        --input-payload-format-protobuf-schema-definition \
    '
      syntax = "proto3";
      message schema {
        string name = 1;
        string severity = 2;
      }
    '

    O exemplo a seguir usa uma chave output_payload_format_avro_schema_definition e um flag --input-payload-format-avro-schema-definition para criar um pipeline que espera eventos em um formato Avro e os gera no mesmo formato:

    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"}]}'

    O exemplo a seguir usa uma chave output_payload_format_protobuf_schema_definition e um flag --input-payload-format-avro-schema-definition para atualizar um pipeline e converter os dados de eventos de Avro para Protobuf usando definições de esquema:

    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" },
          ]
        }
        '