수신된 이벤트 형식 지정

파이프라인은 버스를 대상 대상으로 연결하고 이벤트 메시지를 해당 대상으로 라우팅합니다. 특정 형식의 이벤트 데이터를 예상하도록 파이프라인을 구성하거나 이벤트가 대상에 전송되기 전에 지원되는 형식에서 다른 형식으로 이벤트 데이터를 변환할 수 있습니다. 예를 들어 Avro 데이터만 허용하는 엔드포인트로 이벤트를 라우팅해야 할 수 있습니다.

지원되는 형식

다음과 같은 형식 변환이 지원됩니다.

  • Avro에서 JSON으로
  • Avro - Protobuf
  • JSON에서 Avro로
  • JSON에서 Protobuf로 변환
  • Protobuf - Avro
  • Protobuf to JSON

다음에 유의하세요.

  • 이벤트 형식을 변환하면 전체 이벤트 메시지가 아닌 이벤트 페이로드 변환됩니다.

  • 파이프라인에 수신 데이터 형식이 지정된 경우 모든 이벤트가 해당 형식과 일치해야 합니다. 예상 형식과 일치하지 않는 이벤트는 지속 오류로 처리됩니다.

  • 파이프라인에 수신 데이터 형식이 지정되지 않은 경우 발신 형식을 설정할 수 없습니다.

  • 특정 대상에 맞게 이벤트 형식이 변환되기 전에 구성된 모든 데이터 변환이 먼저 적용됩니다.

  • 메시지 바인딩을 지정하지 않는 한 이벤트는 항상 바이너리 콘텐츠 모드에서 HTTP 요청을 사용하는 CloudEvents 형식으로 전송됩니다.

  • JSON 스키마는 동적으로 감지됩니다. Protobuf 스키마 정의의 경우 최상위 유형을 하나만 정의할 수 있으며 다른 유형을 참조하는 가져오기 문은 지원되지 않습니다. syntax 식별자가 없는 스키마 정의는 기본적으로 proto2로 설정됩니다. 스키마 크기 제한이 있습니다.

이벤트 형식을 지정하도록 파이프라인 구성

Google Cloud 콘솔에서 또는 gcloud CLI를 사용하여 특정 형식의 이벤트 데이터를 예상하도록 파이프라인을 구성하거나 이벤트 데이터를 한 형식에서 다른 형식으로 변환할 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 Eventarc > 파이프라인 페이지로 이동합니다.

    파이프라인으로 이동

  2. 파이프라인을 만들거나 파이프라인을 업데이트하는 경우 파이프라인 이름을 클릭합니다.

    파이프라인을 업데이트하는 데 10분 이상 걸릴 수 있습니다.

  3. 파이프라인 세부정보 페이지에서 수정을 클릭합니다.

  4. 이벤트 미디에이션 창에서 다음을 수행합니다.

    1. 변환 적용 체크박스를 선택합니다.
    2. 인바운드 형식 목록에서 해당하는 형식을 선택합니다.

      파이프라인에 수신 데이터 형식이 지정된 경우 모든 이벤트가 해당 형식과 일치해야 합니다. 예상 형식과 일치하지 않는 이벤트는 지속 오류로 처리됩니다.

    3. Avro 또는 Protobuf 형식의 경우 인바운드 스키마를 지정해야 합니다. 원하는 경우 직접 지정하는 대신 수신 스키마를 업로드할 수 있습니다.

    4. CEL 표현식 입력란에 CEL을 사용하여 변환 표현식을 작성합니다.

    5. 계속을 클릭합니다.

  5. 대상 창에서 다음을 수행합니다.

    1. 해당하는 경우 외부 형식 목록에서 형식을 선택합니다.

      파이프라인에 수신 데이터 형식이 지정되지 않은 경우 발신 형식을 설정할 수 없습니다.

    2. 선택사항: 메시지 결합을 적용합니다. 자세한 내용은 메시지 결합을 참고하세요.

  6. 저장을 클릭합니다.

gcloud

  1. 터미널을 엽니다.

  2. 파이프라인을 만들거나 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" },
          ]
        }
        '