Azure Event Grid 네임스페이스 - CloudEvents 스키마 지원

Event Grid 네임스페이스 토픽은 JSON 형식HTTP 프로토콜 바인딩을 사용하여 CNCF(Cloud Native Computing Foundation)의 개방형 표준 CloudEvents 1.0 사양을 준수하는 이벤트를 허용합니다. CloudEvent는 전달되는 내용, 이벤트 데이터, 그에 대한 메타데이터를 포함하는 일종의 메시지입니다. 이벤트 기반 아키텍처의 이벤트 데이터는 일반적으로 시스템 상태 변경을 알리는 정보를 전달합니다. CloudEvents 메타데이터는 메시지의 출처(원본 시스템), 해당 형식 등과 같은 메시지에 대한 컨텍스트 정보를 제공하는 특성 집합으로 구성됩니다. CloudEvents 사양을 준수하는 모든 유효한 메시지에는 다음과 같은 필수 컨텍스트 특성이 포함되어야 합니다.

CloudEvents 사양은 Event Grid를 사용할 때 포함할 수 있는 선택적확장 컨텍스트 특성도 정의합니다.

Event Grid를 사용하는 경우 CloudEvents는 잘 문서화된 사용 사례(이벤트, 이벤트 형식 등을 전송하는 모드 등), 확장성, 향상된 상호 운용성 때문에 기본 설정 이벤트 형식입니다. CloudEvents는 이벤트를 게시하고 사용하는 데 필요한 일반적인 이벤트 형식을 제공하여 상호 운용성을 개선합니다. 이를 통해 균일한 도구와 이벤트를 라우트하고 처리하는 표준 방법을 사용할 수 있습니다.

CloudEvents 콘텐츠 모드

CloudEvents 사양은 이진, 구조화, 일괄 처리의 세 가지 콘텐츠 모드를 정의합니다.

Important

콘텐츠 모드를 사용하면 텍스트(JSON, text/*등) 또는 이진 인코딩된 이벤트 데이터를 교환할 수 있습니다. 이진 콘텐츠 모드는 이진 데이터를 보내는 데만 사용되지 않습니다.

콘텐츠 모드는 사용하는 인코딩, 이진 또는 텍스트가 아니라 이벤트 데이터와 해당 메타데이터를 설명하고 교환하는 방법에 관한 것입니다. 구조화된 콘텐츠 모드는 컨텍스트 특성과 이벤트 데이터가 HTTP 페이로드에 함께 있는 단일 구조(예: JSON 개체)를 사용합니다. 이진 콘텐츠 모드는 HTTP 헤더에 매핑되는 컨텍스트 특성과 Content-Type에서 설정된 미디어 형식에 따라 인코딩된 HTTP 페이로드인 이벤트 데이터를 구분합니다.

CloudEvents 지원

이 표에서는 현재 지원되는 CloudEvents 사양을 보여 줍니다.

CloudEvents 콘텐츠 모드 지원?
구조화된 JSON
구조화된 JSON 일괄 처리 예, 이벤트 게시
이진 예, 이벤트 게시

이벤트에 허용되는 최대 크기는 1MB입니다. 64KB를 초과하는 이벤트는 64KB 단위로 요금이 부과됩니다.

구조화된 콘텐츠 모드

CloudEvents 구조화된 콘텐츠 모드의 메시지에는 컨텍스트 특성과 이벤트 데이터가 HTTP 페이로드에 함께 포함됩니다.

Important

현재 Event Grid는 HTTP를 사용하여 CloudEvents JSON 형식을 지원합니다.

다음은 JSON 형식을 사용하는 구조화된 모드의 CloudEvents 예제입니다. 메타데이터("데이터"가 아닌 모든 특성)와 메시지/이벤트 데이터("데이터" 개체)는 모두 JSON을 사용하여 설명합니다. 이 예제에는 일부 선택적 특성(subject, time, datacontenttype) 및 확장 특성(comexampleextension1, comexampleothervalue)과 함께 필요한 모든 컨텍스트 특성이 포함됩니다.

{
    "specversion" : "1.0",
    "type" : "com.yourcompany.order.created",
    "source" : "/orders/account/123",
    "subject" : "O-28964",
    "id" : "A234-1234-1234",
    "time" : "2018-04-05T17:31:00Z",
    "comexampleextension1" : "value",
    "comexampleothervalue" : 5,
    "datacontenttype" : "application/json",
    "data" : {
       "orderId" : "O-28964",
       "URL" : "https://com.yourcompany/orders/O-28964"
    }
}

JSON 형식을 구조화된 콘텐츠와 함께 사용하여 JSON 값이 아닌 이벤트 데이터를 보낼 수 있습니다. 이를 위해 다음 단계를 수행합니다.

  1. 데이터가 인코딩되는 미디어 형식인 datacontenttype 특성을 포함합니다.
  2. 미디어 형식이 텍스트 형식(예: text/plain text/csv 또는 application/xml)으로 인코딩된 경우 값으로 통신하는 내용이 포함된 JSON 문자열이 있는 data 특성을 사용해야 합니다.
  3. 미디어 형식이 이진 인코딩을 나타내는 경우 값이 BASE64로 인코딩된 이진 값을 포함하는 JSON 문자열data_base64 특성을 사용해야 합니다.

예를 들어 이 CloudEvent는 Protobuf 메시지를 교환하기 위해 application/protobuf로 인코딩된 이벤트 데이터를 전달합니다.

{
    "specversion" : "1.0",
    "type" : "com.yourcompany.order.created",
    "source" : "/orders/account/123",
    "id" : "A234-1234-1234",
    "time" : "2018-04-05T17:31:00Z",
    "datacontenttype" : "application/protobuf",
    "data_base64" : "VGhpcyBpcyBub3QgZW5jb2RlZCBpbiBwcm90b2J1ZmYgYnV0IGZvciBpbGx1c3RyYXRpb24gcHVycG9zZXMsIGltYWdpbmUgdGhhdCBpdCBpcyA6KQ=="
}

data 또는 data_base64 특성의 사용에 대한 자세한 내용은 데이터 처리를 참조하세요.

이 콘텐츠 모드에 대한 자세한 내용은 CloudEvents HTTP 구조화된 콘텐츠 모드 사양을 참조하세요.

일괄 처리 콘텐츠 모드

Event Grid는 현재 Event Grid에 CloudEvents를 게시할 때 JSON 일괄 처리 콘텐츠 모드를 지원합니다. 이 콘텐츠 모드는 구조화된 콘텐츠 모드에서 CloudEvents로 채워진 JSON 배열을 사용합니다. 예를 들어 애플리케이션은 다음과 같은 배열을 사용하여 두 개의 이벤트를 게시할 수 있습니다. 마찬가지로, Event Grid의 데이터 평면 SDK를 사용하는 경우 이 페이로드도 전송됩니다.

[
    {
        "specversion": "1.0",
        "id": "E921-1234-1235",
        "source": "/mycontext",
        "type": "com.example.someeventtype",
        "time": "2018-04-05T17:31:00Z",
        "data": "some data"
    },
    {
        "specversion": "1.0",
        "id": "F555-1234-1235",
        "source": "/mycontext",
        "type": "com.example.someeventtype",
        "time": "2018-04-05T17:31:00Z",
        "data": {
            "somekey" : "value",
            "someOtherKey" : 9
        }
    }
]

자세한 내용은 CloudEvents 일괄 처리 콘텐츠 모드 사양을 참조하세요.

일괄 처리

애플리케이션은 단일 게시 요청으로 효율성과 처리량을 높이기 위해 여러 이벤트를 배열로 일괄 처리해야 합니다. 일괄 처리는 1MB까지 가능하며 이벤트의 최대 크기는 1MB입니다.

이진 콘텐츠 모드

이진 콘텐츠 모드의 CloudEvent에는 HTTP 헤더로 설명된 컨텍스트 특성이 있습니다. HTTP 헤더의 이름은 ce-로 접두사로 지정된 컨텍스트 특성의 이름입니다. Content-Type 헤더는 이벤트 데이터가 인코딩되는 미디어 형식을 반영합니다.

Important

이진 콘텐츠 모드를 사용하는 경우 ce-datacontenttype HTTP 헤더도 없어야 합니다.

Important

이진 콘텐츠 모드를 사용할 때 고유한 특성(예: 확장 특성)을 포함하려는 경우 해당 이름이 ASCII 문자가 소문자('a'~'z') 또는 숫자('0'~'9')로 구성되고 길이가 20자를 초과하지 않는지 확인합니다. 즉, CloudEvents 컨텍스트 특성의 이름을 지정하는 명명 규칙은 유효한 HTTP 헤더 이름보다 더 제한적입니다. 모든 유효한 HTTP 헤더 이름이 유효한 확장 특성 이름인 것은 아닙니다.

HTTP 페이로드는 Content-Type의 미디어 유형에 따라 인코딩된 이벤트 데이터입니다.

콘텐츠 이진 모드에서 CloudEvent를 게시하는 데 사용되는 HTTP 요청은 다음 예제와 같습니다.

POST / HTTP/1.1
HOST mynamespace.eastus-1.eventgrid.azure.net/topics/mytopic
ce-specversion: 1.0
ce-type: com.example.someevent
ce-source: /mycontext
ce-id: A234-1234-1234
ce-time: 2018-04-05T17:31:00Z
ce-comexampleextension1: value
ce-comexampleothervalue: 5
content-type: application/protobuf

Binary data according to protobuf encoding format. No context attributes are included.

CloudEvents의 이진 또는 구조화된 콘텐츠 모드를 사용하는 경우

홉 및 프로토콜 간에 CloudEvents를 전달하는 간단한 방법을 원하는 경우 구조화된 콘텐츠 모드를 사용할 수 있습니다. 구조화된 콘텐츠 모드의 CloudEvent에는 메타데이터와 함께 메시지가 포함되어 있으므로 클라이언트가 이를 전체적으로 사용하고 다른 시스템에 전달하는 것이 쉽습니다.

다운스트림 애플리케이션에 추가 정보(즉, 컨텍스트 특성)가 없는 메시지만 필요한 경우 이진 콘텐츠 모드를 사용할 수 있습니다. 구조화된 콘텐츠 모드를 사용하면 CloudEvent에서 이벤트 데이터(메시지)를 가져올 수 있지만 소비자 애플리케이션이 HTTP 페이로드에 있는 경우 더 쉽습니다. 예를 들어 다른 애플리케이션은 다른 프로토콜을 사용할 수 있으며 메타데이터가 아닌 핵심 메시지에만 관심이 있을 수 있습니다. 실제로 메타데이터는 가장 가까운 첫 번째 홉에만 관련될 수 있습니다. 이 경우 메타데이터와 별도로 교환하려는 데이터가 있으면 더 쉽게 처리하고 전달할 수 있습니다.