Formate eventos recebidos

Um pipeline liga um autocarro a um destino de destino e encaminha mensagens de eventos para esse destino. Pode configurar um pipeline para esperar dados de eventos num formato específico ou, antes de os eventos serem enviados para um destino, pode converter os dados de eventos de um formato suportado para outro. Por exemplo, pode ter de encaminhar eventos para um ponto final que apenas aceite dados Avro.

Formatos suportados

São suportadas as seguintes conversões de formatos:

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

Tenha em conta o seguinte:

  • Quando converte o formato de eventos, apenas a carga útil do evento é convertida e não a mensagem de evento completa.

  • Se for especificado um formato de dados de entrada para um pipeline, todos os eventos têm de corresponder a esse formato. Todos os eventos que não correspondem ao formato esperado são tratados como erros persistentes.

  • Se um formato de dados de entrada não for especificado para um pipeline, não é possível definir um formato de saída.

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

  • Os eventos são sempre enviados num formato CloudEvents através de um pedido HTTP no modo de conteúdo binário a menos que especifique uma associação de mensagens.

  • Os esquemas JSON são detetados dinamicamente. Para definições de esquemas Protobuf, só pode definir um tipo de nível superior e as declarações de importação que fazem referência a outros tipos não são suportadas. As definições de esquema sem um identificador syntax têm como predefinição proto2. Tenha em atenção que existe um limite de tamanho do esquema.

Configure um pipeline para formatar eventos

Pode configurar um pipeline para esperar dados de eventos num formato específico ou para converter dados de eventos de um formato para outro na Google Cloud consola ou através da CLI gcloud.

Consola

  1. Na Google Cloud consola, aceda à página Eventarc > Pipelines.

    Aceda a Pipelines

  2. Pode criar um pipeline ou, se estiver a atualizar um pipeline, clicar no nome do pipeline.

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

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

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

      Tenha em atenção que, se for especificado um formato de dados de entrada para um pipeline, todos os eventos têm de corresponder a esse formato. Todos os eventos que não correspondem ao formato esperado são tratados como erros persistentes.

    3. Para formatos Avro ou Protobuf, tem de especificar um esquema de entrada. (Opcionalmente, em vez de o especificar diretamente, pode carregar um esquema de entrada.)

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

    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.

      Tenha em atenção que, se não for especificado um formato de dados de entrada para um pipeline, não é possível definir um formato de saída.

    2. Opcional: aplique uma associação de mensagens. Para mais informações, consulte o artigo Associação de mensagens.

  6. Clique em Guardar.

    A atualização de um pipeline pode demorar alguns minutos.

gcloud

  1. Abra um terminal.

  2. Pode criar um pipeline ou atualizar um pipeline através do comando gcloud eventarc pipelines update:

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

    Substitua o seguinte:

    • PIPELINE_NAME: o ID do pipeline ou um nome totalmente qualificado
    • REGION: uma localização avançada do Eventarc suportada

      Em alternativa, pode definir a propriedade de localização da CLI gcloud:

      gcloud config set eventarc/location REGION
      
    • INPUT_PAYLOAD_FLAG: um indicador 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

      Tenha em atenção que, se for especificado um formato de dados de entrada para um pipeline, todos os eventos têm de corresponder a esse formato. Todos os eventos que não correspondem ao formato esperado sã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

      Tenha em atenção que, se definir uma chave de formato de dados de saída, também tem de especificar uma flag de formato de dados de entrada.

    A atualização de um pipeline pode demorar alguns minutos.

    Exemplos:

    O exemplo seguinte usa uma flag --input-payload-format-protobuf-schema-definition para especificar que o pipeline deve esperar eventos num 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 seguinte usa uma chave output_payload_format_avro_schema_definitione uma flag --input-payload-format-avro-schema-definitionpara criar um pipeline que espera eventos num formato Avro e os produz 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 seguinte usa uma chave output_payload_format_protobuf_schema_definition e uma flag --input-payload-format-avro-schema-definition para atualizar um pipeline e converter os respetivos dados de eventos de Avro para Protobuf através de 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" },
          ]
        }
        '