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çãoproto2
. 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
Na Google Cloud consola, aceda à página Eventarc > Pipelines.
Pode criar um pipeline ou, se estiver a atualizar um pipeline, clicar no nome do pipeline.
Na página Detalhes do pipeline, clique em
Editar.No painel Mediação de eventos, faça o seguinte:
- Selecione a caixa de verificação Aplicar uma transformação.
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.
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.)
No campo Expressão IEC, escreva uma expressão de transformação usando o IEC.
Clique em Continuar.
No painel Destino, faça o seguinte:
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.
Opcional: aplique uma associação de mensagens. Para mais informações, consulte o artigo Associação de mensagens.
Clique em Guardar.
A atualização de um pipeline pode demorar alguns minutos.
gcloud
Abra um terminal.
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 qualificadoREGION
: uma localização avançada do Eventarc suportadaEm 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_definition
e uma flag--input-payload-format-avro-schema-definition
para 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" }, ] } '