Una canalización conecta un bus a un destino objetivo y enruta los mensajes de eventos a ese destino. Puedes configurar una canalización para que espere datos de eventos en un formato específico o, antes de que los eventos se entreguen a un destino, puedes convertir los datos de eventos de un formato compatible a otro. Por ejemplo, es posible que necesites enrutar eventos a un extremo que solo acepte datos de Avro.
Formatos admitidos
Se admiten las siguientes conversiones de formato:
- De Avro a JSON
- De Avro a Protobuf
- JSON a Avro
- JSON a Protobuf
- De Protobuf a Avro
- Protobuf a JSON
Ten en cuenta lo siguiente:
Cuando conviertes el formato de los eventos, solo se convierte la carga útil del evento y no todo el mensaje del evento.
Si se especifica un formato de datos entrante para una canalización, todos los eventos deben coincidir con ese formato. Cualquier evento que no coincida con el formato esperado se considera un error persistente.
Si no se especifica un formato de datos entrantes para una canalización, no se puede establecer un formato saliente.
Antes de que se convierta un formato de evento para un destino específico, se aplica primero cualquier transformación de datos que se haya configurado.
Los eventos siempre se entregan en un formato de CloudEvents con una solicitud HTTP en modo de contenido binario a menos que especifiques una vinculación de mensajes.
Los esquemas JSON se detectan de forma dinámica. En el caso de las definiciones de esquemas de Protobuf, solo puedes definir un tipo de nivel superior, y no se admiten las declaraciones de importación que hacen referencia a otros tipos. Las definiciones de esquemas sin un identificador
syntax
se establecen de forma predeterminada enproto2
. Ten en cuenta que hay un límite de tamaño del esquema.
Configura una canalización para dar formato a los eventos
Puedes configurar un flujo para que espere datos de eventos en un formato específico o para convertir datos de eventos de un formato a otro en la consola de Google Cloud o con gcloud CLI.
Console
En la consola de Google Cloud, ve a la página Eventarc > Canales.
Puedes crear una canalización o, si quieres actualizar una, haz clic en su nombre.
Ten en cuenta que la actualización de una canalización puede tardar más de 10 minutos.
En la página Detalles de la canalización, haz clic en
Editar.En el panel Mediación de eventos, haz lo siguiente:
- Selecciona la casilla de verificación Aplicar una transformación.
En la lista Formato entrante, selecciona el formato aplicable.
Ten en cuenta que, si se especifica un formato de datos entrantes para una canalización, todos los eventos deben coincidir con ese formato. Cualquier evento que no coincida con el formato esperado se tratará como error persistente.
Para los formatos Avro o Protobuf, debes especificar un esquema entrante. (De manera opcional, en lugar de especificarlo directamente, puedes subir un esquema entrante).
En el campo CEL expression, escribe una expresión de transformación con CEL.
Haga clic en Continuar.
En el panel Destino, haz lo siguiente:
Si corresponde, selecciona un formato en la lista Formato de salida.
Ten en cuenta que, si no se especifica un formato de datos entrantes para una canalización, no se puede establecer un formato saliente.
Opcional: Aplica una vinculación de mensajes. Para obtener más información, consulta Vinculación de mensajes.
Haz clic en Guardar.
gcloud
Abre una terminal.
Puedes crear una canalización o actualizarla con el comando
gcloud beta eventarc pipelines update
:Ten en cuenta que la actualización de una canalización puede tardar más de 10 minutos.
gcloud beta eventarc pipelines update PIPELINE_NAME \ --location=REGION \ --INPUT_PAYLOAD_FLAG \ --destinations=OUTPUT_PAYLOAD_KEY
Reemplaza lo siguiente:
PIPELINE_NAME
: El ID de la canalización o un nombre completamente calificadoREGION
: Una ubicación de Eventarc Advanced compatibleComo alternativa, puedes configurar la propiedad de ubicación de gcloud CLI:
gcloud config set eventarc/location REGION
INPUT_PAYLOAD_FLAG
: Es una marca de formato de datos de entrada que puede ser una de las siguientes:--input-payload-format-avro-schema-definition
--input-payload-format-json
--input-payload-format-protobuf-schema-definition
Ten en cuenta que, si se especifica un formato de datos de entrada para una canalización, todos los eventos deben coincidir con ese formato. Cualquier evento que no coincida con el formato esperado se tratará como error persistente.
OUTPUT_PAYLOAD_KEY
: Es una clave de formato de datos de salida que puede ser una de las siguientes:output_payload_format_avro_schema_definition
output_payload_format_json
output_payload_format_protobuf_schema_definition
Ten en cuenta que, si configuras una clave de formato de datos de salida, también debes especificar una marca de formato de datos de entrada.
Ejemplos:
En el siguiente ejemplo, se usa una marca
--input-payload-format-protobuf-schema-definition
para especificar que la canalización debe esperar eventos en un formato de datos de Protobuf con un esquema específico:gcloud beta eventarc pipelines update my-pipeline \ --input-payload-format-protobuf-schema-definition \ ' syntax = "proto3"; message schema { string name = 1; string severity = 2; } '
En el siguiente ejemplo, se usa una clave
output_payload_format_avro_schema_definition
y una marca--input-payload-format-avro-schema-definition
para crear una canalización que espera eventos en un formato Avro y los muestra en el mismo formato: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"}]}'
En el siguiente ejemplo, se usa una clave
output_payload_format_protobuf_schema_definition
y una marca--input-payload-format-avro-schema-definition
para actualizar una canalización y convertir sus datos de eventos de Avro a Protobuf con definiciones de esquemas: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" }, ] } '