파이프라인은 버스를 대상 대상으로 연결하고 이벤트 메시지를 해당 대상으로 라우팅합니다. 특정 형식의 이벤트 데이터를 예상하도록 파이프라인을 구성하거나 이벤트가 대상에 전송되기 전에 지원되는 형식에서 다른 형식으로 이벤트 데이터를 변환할 수 있습니다. 예를 들어 Avro 데이터만 허용하는 엔드포인트로 이벤트를 라우팅해야 할 수 있습니다.
지원되는 형식
다음과 같은 형식 변환이 지원됩니다.
- Avro에서 JSON으로
- Avro - Protobuf
- JSON에서 Avro로
- JSON에서 Protobuf로 변환
- Protobuf - Avro
- Protobuf to JSON
다음에 유의하세요.
이벤트 형식을 변환하면 전체 이벤트 메시지가 아닌 이벤트 페이로드 만 변환됩니다.
파이프라인에 수신 데이터 형식이 지정된 경우 모든 이벤트가 해당 형식과 일치해야 합니다. 예상 형식과 일치하지 않는 이벤트는 지속 오류로 처리됩니다.
파이프라인에 수신 데이터 형식이 지정되지 않은 경우 발신 형식을 설정할 수 없습니다.
특정 대상에 맞게 이벤트 형식이 변환되기 전에 구성된 모든 데이터 변환이 먼저 적용됩니다.
메시지 바인딩을 지정하지 않는 한 이벤트는 항상 바이너리 콘텐츠 모드에서 HTTP 요청을 사용하는 CloudEvents 형식으로 전송됩니다.
JSON 스키마는 동적으로 감지됩니다. Protobuf 스키마 정의의 경우 최상위 유형을 하나만 정의할 수 있으며 다른 유형을 참조하는 가져오기 문은 지원되지 않습니다.
syntax
식별자가 없는 스키마 정의는 기본적으로proto2
로 설정됩니다. 스키마 크기 제한이 있습니다.
이벤트 형식을 지정하도록 파이프라인 구성
Google Cloud 콘솔에서 또는 gcloud CLI를 사용하여 특정 형식의 이벤트 데이터를 예상하도록 파이프라인을 구성하거나 이벤트 데이터를 한 형식에서 다른 형식으로 변환할 수 있습니다.
콘솔
Google Cloud 콘솔에서 Eventarc > 파이프라인 페이지로 이동합니다.
파이프라인을 만들거나 파이프라인을 업데이트하는 경우 파이프라인 이름을 클릭합니다.
파이프라인을 업데이트하는 데 10분 이상 걸릴 수 있습니다.
파이프라인 세부정보 페이지에서
수정을 클릭합니다.이벤트 미디에이션 창에서 다음을 수행합니다.
대상 창에서 다음을 수행합니다.
해당하는 경우 외부 형식 목록에서 형식을 선택합니다.
파이프라인에 수신 데이터 형식이 지정되지 않은 경우 발신 형식을 설정할 수 없습니다.
선택사항: 메시지 결합을 적용합니다. 자세한 내용은 메시지 결합을 참고하세요.
저장을 클릭합니다.
gcloud
터미널을 엽니다.
파이프라인을 만들거나
gcloud beta eventarc pipelines update
명령어를 사용하여 파이프라인을 업데이트할 수 있습니다.파이프라인을 업데이트하는 데 10분 이상 걸릴 수 있습니다.
gcloud beta eventarc pipelines update PIPELINE_NAME \ --location=REGION \ --INPUT_PAYLOAD_FLAG \ --destinations=OUTPUT_PAYLOAD_KEY
다음을 바꿉니다.
PIPELINE_NAME
: 파이프라인의 ID 또는 정규화된 이름REGION
: 지원되는 Eventarc Advanced 위치또는 gcloud CLI 위치 속성을 설정할 수 있습니다.
gcloud config set eventarc/location REGION
INPUT_PAYLOAD_FLAG
: 다음 중 하나일 수 있는 입력 데이터 형식 플래그입니다.--input-payload-format-avro-schema-definition
--input-payload-format-json
--input-payload-format-protobuf-schema-definition
파이프라인에 입력 데이터 형식이 지정된 경우 모든 이벤트가 해당 형식과 일치해야 합니다. 예상 형식과 일치하지 않는 이벤트는 지속 오류로 처리됩니다.
OUTPUT_PAYLOAD_KEY
: 다음 중 하나일 수 있는 출력 데이터 형식 키입니다.output_payload_format_avro_schema_definition
output_payload_format_json
output_payload_format_protobuf_schema_definition
출력 데이터 형식 키를 설정하는 경우 입력 데이터 형식 플래그도 지정해야 합니다.
예:
다음 예에서는
--input-payload-format-protobuf-schema-definition
플래그를 사용하여 파이프라인이 특정 스키마가 있는 Protobuf 데이터 형식의 이벤트를 예상해야 한다고 지정합니다.gcloud beta eventarc pipelines update my-pipeline \ --input-payload-format-protobuf-schema-definition \ ' syntax = "proto3"; message schema { string name = 1; string severity = 2; } '
다음 예에서는
output_payload_format_avro_schema_definition
키와--input-payload-format-avro-schema-definition
플래그를 사용하여 Avro 형식의 이벤트를 예상하고 동일한 형식으로 출력하는 파이프라인을 만듭니다.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"}]}'
다음 예에서는
output_payload_format_protobuf_schema_definition
키와--input-payload-format-avro-schema-definition
플래그를 사용하여 파이프라인을 업데이트하고 스키마 정의를 사용하여 이벤트 데이터를 Avro에서 Protobuf로 변환합니다.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" }, ] } '